我正在開發iOS的BlackJack遊戲。跟蹤目前的狀況和需要做的事情變得越來越困難。例如,我有這使當前遊戲的軌道C++類:在iOS中等待用戶交互的設計模式?
class Game {
queue<Player> playerQueue;
void hit();
void stand();
}
目前我使用的事件(方法A)實現它:
- (void)hitButtonPress:(id)sender {
game->hit();
}
void Game::hit() {
dealCard(playerQueue.top());
}
void Game::stand() {
playerQueue.pop();
goToNextPlayersTurn();
}
會陸續添加更多和更多的選擇在遊戲中,爲每個遊戲創建事件變得單調乏味,難以追蹤。
另一種方式我想實現它是像這樣(方法B):
void Game::playersTurn(Player *player) {
dealCards(player);
while (true) {
string choice = waitForUserChoice();
if (choice == "stand") break;
if (choice == "hit")
dealCard(player);
// etc.
}
playerQueue.pop();
goToNextPlayersTurn();
}
凡waitForUserChoice
是一個特殊的功能,讓用戶與UIViewController
互動,一旦用戶按下一個按鈕,才把將控制返回到playersTurn
功能。換句話說,它暫停程序,直到用戶點擊一個按鈕。
使用方法A,我需要在每次需要用戶交互時分割我的函數。方法B可以讓所有事情都控制得更好一些。 基本上方法A和B之間的差值如下:
答:
function A() {
initialize();
// now wait for user interaction by waiting for a call to CompleteA
}
function CompleteA() {
finalize();
}
B:
function B() {
initialize();
waitForUserInteraction();
finalize();
}
通知如何乙保持代碼更有條理。 Objective-C有沒有辦法做到這一點?或者有沒有其他方法可以替代我所提的建議?
我能想到的第三個選擇是使用有限狀態機。我已經聽到了一些關於他們的信息,但我確定這是否能幫助我解決這個問題。
我的問題推薦的設計模式是什麼?
通常,您訂閱的事件會告訴您用戶何時進行了一些輸入。編碼遊戲時,通常會有一個循環,並檢查用戶輸入。在這種情況下,你通常想看看Cocos2D和更新函數。 – Daniel 2013-02-21 09:48:19
這些塊可以幫助你輕鬆解決這個問題。 – holex 2013-02-21 13:45:47