「クーデター」と呼ばれるゲームのプログラミングに問題があり、問題の内容を説明するために、ゲームの内容を簡単に説明する必要があります。クーデターは、プレイヤーがお互いを排除し、最後に残ったプレーヤーになるカードゲームです。これを行うために、プレイヤーはいくつかのアクションを選択できますが、他のプレイヤーにも嘘をつけることができます。このゲームでは、他のプレイヤーは「間抜け」と呼ぶことも、他のプレイヤーのアクションをブロックすることもできます。このため、レスポンスウィンドウを作成して、他のプレイヤーがチャレンジ、ブロック、または何もしないようにする必要があります。アクションの結果は、応答に依存します。例えば、プレーヤーは対外援助を得ようとします。私は彼の行動を阻止するか、彼を続けることを決めることができます。もし私がブロックするが、それはここで問題ではありません。JFrameが白く、whileループで反応しない
実際の問題は次のとおりです。すべてのプレイヤーにJFrame経由で応答(ブロックまたは何もしない)を与えるチャンスを与え、すべてのプレイヤーの応答を待つためにwhileループを使用します。しかし、このループは、結果がプレイヤーの反応に依存するため、メソッドが進行しないようにする以外は何もしません。 whileループでは、私が作成したJFrameは白く表示され、私が作成した2つのボタンが含まれていません。この時点で私は閉じるボタンを押すこともできますが、私のレスポンスのないウィンドウに依存するwhileループのために反応しません。とにかくこれを修正するには?
if (turnCount == players[currentPlayerNum].getPlayerNum()){
for(int i=0; i<players.length;i++){
//If it is not the players turn and they have one or two lives, make response window
if (players[i].getPlayerNum() != turnCount){
if (players[i].getLives() != 0){
//foreignAidBlock constructs the response window
players[i].foreignAidBlock(turnCount);
}
else{
//Not applicable since out of game/not in game
players[i].setResponse("NA");
}
}
else{
//Not applicable since out of game/not in game
players[i].setResponse("NA");
}
}
//Idea: PAUSE TILL RESPONSES COME IN
while(players[0].getResponse() != null || players[1].getResponse() != null || players[2].getResponse() != null || players[3].getResponse() != null)
{
System.out.println(players[0].getResponse());
System.out.println(players[1].getResponse());
System.out.println(players[2].getResponse());
System.out.println(players[3].getResponse());
}
私はこのコードの一部を実行しているから得る結果は次のとおりです。 "NA ヌル NA NA " 連続 。まだ答えられていないプレーヤーを表すためにnullを使用します。方法の終わりに、私はすべての選手の能力をヌルに戻しました。
私の回答ウィンドウは、プレイヤーの応答をnullから "B"または "N"に変更することだけです。しかし、ボタンへのアクセスがなければ、私はこれを行うことはできません。誰も私のスレッドを一時停止するために何かを使う方法についてのヒントはありますか?
JFrameを強制的に開いたままにしておくと、他のアクションが続行されなくなる可能性があります。おそらくJOptionPaneのように –
コードの構造を変更してください。条件に対して*ループ*をしないでください:これはUIをブロックし、レンダリングなどの独自の処理を行うことはできません。その代わりに、イベントを使用して状態を変化させてから状態をチェックし、「次の適切なことを行う」 - 「ブロック」は論理的ですが、特定の機能内のフローとは独立しています。 – user2864740