ループでボタンが押されるのを待つにはどうすればよいですか?
-
08-07-2019 - |
質問
サイコロを転がしてボード上を移動する多数のプレイヤーでボードゲームをエミュレートする簡単なプログラムがあるとします。プレイヤーは人間でもコンピューターでも構いません。
これがコマンドラインスタイルのゲームである場合は、単純にループを作成してプレーヤーを反復処理し、そのプレーヤーに対してdiceRoll関数を呼び出します。
プレーヤーがコンピュータープレーヤーの場合、diceRollは単にサイコロを振るようにコンピューターに指示します。
プレイヤーが人間の場合、diceRollはユーザーがロールコマンドを入力してから続行するまで待機します。
このアイデアをグラフィックデザインに転送するにはどうすればよいですか?ロールボタンが押されたかどうかを継続的に確認することは意味がないと思います。私はactionscript 2を使用していますが、アイデアはどんな言語でも構いません。これを設計する最良の方法についての意見が欲しいのですが。わからない、ある種の「waitForButtonPress」関数があるとは思いませんか?
解決
私が気に入っている解決策を見つけたと思います。 メインゲームクラスには、次のようなnextTurn関数があります。
nextTurn() {
bool guiSet = false
while (guiSet = false) {
//Get the next player
if (next player is human) {
//enable the gui (ie. the 'Roll Dice' button)
guiSet = true
} else {
//The player is a computer
//Have the computer roll the dice and make any necessary decisions
}
}
}
人間のプレイヤーがターンを終えると、nextTurnへの呼び出しが行われ、ゲームのプレイが続行されます。コンピューターがターンを終了しても、フローはまだwhileループ内にあるため、ゲームは続行されます。
他のヒント
Nターンがあり、他のすべてのターンが人間のターンである場合、ゲームに応じて、if elseを使用してループ内からgetUserResponse()を呼び出すことができます。
for i to N
if(i%2==0)
getUserRoll()
else
getComputerRoll()
また、制約がある場合はif条件でチェックします。