iOS用のブラックジャックゲームを開発しています。現在の状態と何をする必要があるかを追跡することは困難になりつつあります。たとえば、現在のゲームを追跡するC++クラスがあります。
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の違いは次のとおりです。
A:
function A() {
initialize();
// now wait for user interaction by waiting for a call to CompleteA
}
function CompleteA() {
finalize();
}
B:
function B() {
initialize();
waitForUserInteraction();
finalize();
}
Bがコードをより整理された状態に保つ方法に注目してください。Objective-Cでこれを行う方法さえありますか?それとも、私が言及していない別の方法が代わりに推奨されていますか?
私が考えることができる3番目のオプションは、有限状態マシンを使用することです。それらについて少し聞いたことがありますが、それがこの場合に役立つかどうかは確かです。
私の問題に推奨されるデザインパターンは何ですか?