2013-05-01 76 views
0

我會做到這一點。現在有一個初級水平遊戲im編碼的問題。我有2個列表來存儲遊戲中的「對象」。一個是「鑽石」可推塊,將被移到「目標」上。一旦所有鑽石都達到目標,水平應該改變。我目前使用「GameStates」來加載每個級別。以下是我遇到問題的代碼片段。目前發生的事情是,遊戲將允許我將「鑽石」推到「目標」上,但是一旦我這樣做,遊戲狀態將不會改變。不知道我錯過了什麼 - 任何幫助表示讚賞。感謝您的時間!基於if語句更改GameState?

void Level1Update(KeyboardState cKB, KeyboardState oKB) 
     { 
      for (int i = 2; i < diamondlist.Count; i++) 
      { 
       if ((Goallist[i].Position == diamondlist[i].Position)) 
       { 
        CurrentGameState = GameState.Level2; 
       } 
      } 
     } 
+0

我看到的一個潛在問題是在你的條件下,你確定鑽石的位置是否與目標位置完全相同?多描述一下游戲會有所幫助。 – Ryan 2013-05-01 21:40:37

+0

地圖基本上是一個16x16的瓷磚佈局。該劇可以將N,S E或W移動一個瓦片。當玩家與鑽石碰撞時,鑽石會沿相應的方向移動一個瓷磚空間。就目前而言,「目標」也在一個平鋪中。我的目標是讓一旦鑽石與目標位於同一平面,下一個遊戲狀態應該加載 - 如果這樣做有意義? – 2013-05-01 21:43:46

+0

爲什麼循環從i = 2開始?你是否知道Diamond [i]會覆蓋Goal [i],或者任何鑽石都可以進入任何目標? – 2013-05-01 21:46:10

回答

0

如果我理解正確,只要所有鑽石和目標位於同一個圖塊上,就想將當前遊戲狀態設置爲下一關。以下代碼確保。

void Level1Update(KeyboardState cKB, KeyboardState oKB) 
{ 
    int i; 
    for (i = 0; i < diamondlist.Count; ++i) 
    { 
     if (Goallist[i].Position != diamondlist[i].Position) 
      break; 
    } 
    // When breaked off the loop, i is never equal to list count 
    if (i == diamondList.Count) 
     CurrentGameState = GameState.Level2; 
}