2010-09-28 52 views
0

我正在創建一個簡單的應用程序,其中有一個角色列表和一個(4)玩家列表,玩家僅僅是對可玩角色的引用。用目標C輪到處理玩家

我卡在如何做到以下幾點:

  1. 做一個參考當前的播放器上轉
  2. 找出誰在轉彎未來的球員是
  3. 處理的最後一個球員,所以它會在回合中返回到第一位玩家。

理想情況下,我想能夠做之後,首先,前年上的NSMutableArray命令,這些我能做到lastObject,但沒有firstObject,afterObject等

我相信你可以使用objectAtIndex僞造BEFORE,AFTER,FIRST命令;但理想情況下,我不想依賴數字引用,因爲它可能是不正確的 - 也如果它是可變的,大小會一直改變。

通常,我將能夠在僞代碼中執行以下操作。

Global player_on_turn.player = Null //player_on_turn is a pointer to the player object 

; Handle next player on turn 
If (player_on_turn.player = Null) Then Error("No player on turn assigned") 
If (sizeOf[playerList]==0) Then Error("There are no players in the game") 
If After player_on_turn = null Then 
    ; We reset it 
    player_on_turn.player = First player 
Else 
    ; Move to the next player on turn 
    player_on_turn.player = After player_on_turn.player 
End If 

考慮到這一點,在上面1-2-3的例子中描述的幫助處理轉身球員的最佳策略是什麼。

感謝

回答

1

它可能不會不管你使用的是什麼數據結構 - 在一定程度上,你將不得不依賴數字索引(除非使用鏈接列表)。這是沒問題的。如果你不想在主遊戲實現中使用它,那也可以。只需創建一個封裝這些東西的類。首先想想你需要它支持的操作。在這裏,我的猜測是那些:

- (PlayerObject *) currentPlayer; 
- (void) startNextTurn; 

如果你有這個,你可以使用這些原語寫你的遊戲而發愁如何最好地實現以後。您可以隨時更改這些內容而不會破壞您的實際遊戲。

我的建議是這樣的:

- (PlayerObject *) currentPlayer; { 
    return [players objectAtIndex: currentPlayerIndex]; 
} 

- (void) startNextTurn; { 
    ++currentPlayerIndex; 
    if (currentPlayerIndex >= [players count]) { 
     currentPlayerIndex = 0; 
    } 
} 

使用指標有OK,即使數組是可變的。如果您有更改player陣列的方法,則他們也可以對currentPlayerIndex進行必要的更改。

有了這個對象可以很容易地編寫單元測試。您在僞代碼中建議的全局變量使得不可能編寫有意義的單元測試。

+0

是的,我認爲這將是一個更好的方法 - 我真的不想走上學習狀態模式或更復雜的東西,看起來很直觀的東西。 – zardon 2010-09-29 07:38:58