ゲーム "Tic tac toe" 1ヶ月以上のコーディングとこれまでの私の2番目に大きなプロジェクトでした)。それはうまく動作します。私の問題は、自分のコードを「クリーンアップ」することです。'while'ループ内で 'if'文を定義する条件を呼び出す方法
while (contains(player1Selections, winningArray1) &&
contains(player1Selections, winningArray2) &&
contains(player1Selections, winningArray3) &&
contains(player1Selections, winningArray4) &&
contains(player1Selections, winningArray5) &&
contains(player1Selections, winningArray6) &&
contains(player1Selections, winningArray7) &&
contains(player1Selections, winningArray8) &&
contains(player2Selections, winningArray1) &&
contains(player2Selections,winningArray2) &&
contains(player2Selections,winningArray3) &&
contains(player2Selections, winningArray4) &&
contains(player2Selections, winningArray5) &&
contains(player2Selections, winningArray6) &&
contains(player2Selections, winningArray7) &&
contains(player2Selections, winningArray8)) {
明確にするために、ここで私は、プレイヤー1の座標の選択や配列リストかどうかをチェックしています:ループ、この醜い声明を伴うの開始は「ながら」コードの主なアクションは、この大きさプレイヤー2の座標リストの配列リストには、勝利パターンごとに8つのハードコードされた3要素長の配列が含まれています(これは、 'contains'メソッドを配列リストに変換して 'containsAll'メソッドを2つの配列リスト(私はスタックオーバーフローフォーラムからこのアイデアを得た、驚き驚き))。ちなみに、それは私がメソッドまで「含む」ように(player1Selections、winningArray1)が含まれ、私が設定されていることを言及することは、真の正確際は、アレイ1の勝利の配列リストが含まれていないプレイヤー1の選択肢の配列リストに出てくる
が必要ですつまり、ループが機能します(1つのプレイヤーの選択に勝利した配列リストが含まれていると停止します)。 (混乱する名前には申し訳ありません)
私の問題は何ですか?私の問題は、プレーヤー1またはプレーヤー2のいずれかが勝利したとき、「プレイヤー[x]が勝つ」というフレーズが必要なことです。最後のボードが印刷される前に上がって、ネオトと十字の最終的な位置を示します(そして、ドローがあるときは、最後のボードが印刷される前に "ドロー"という言葉が必要です)。これは非常に乱雑です解決してください。ループの主要部分は、このようなコードで構成されています
if (togglePlayer == 0) {
if (n1 == 0 && n2 == 0) {
if (coordinate00.equals(" ")) { // coordinate00 is a string
coordinate00 = "X";
player1Selections.add(0.0); //the hard-coded winning-arrays consist of doubles in this format
togglePlayer ++;}
else { System.out.println("Position already occupied."); }
} // this is closing the second 'if' statement but not the first, which gets closed only before I start writing out similar stuff for player 2
そして、ここでは、私は私の問題への解決策として、(上記のようなすべての文の後)は、ループの最後の部分の内側に配置したものです:
if (contains(player1Selections, winningArray1) &&
contains(player1Selections, winningArray2) &&
contains(player1Selections, winningArray3) &&
contains(player1Selections, winningArray4) &&
contains(player1Selections, winningArray5) &&
contains(player1Selections, winningArray6) &&
contains(player1Selections, winningArray7) &&
contains(player1Selections, winningArray8) &&
contains(player2Selections, winningArray1) &&
contains(player2Selections,winningArray2) &&
contains(player2Selections,winningArray3) &&
contains(player2Selections, winningArray4) && c
contains(player2Selections, winningArray5) &&
contains(player2Selections, winningArray6) &&
contains(player2Selections, winningArray7) &&
contains(player2Selections, winningArray8)) {
if ((!coordinate00.equals(" ")) & (!coordinate10.equals(" ")) &
(!coordinate20.equals(" ")) & (!coordinate01.equals(" ")) &
(!coordinate11.equals(" ")) &
(!coordinate21.equals(" ")) & (!coordinate02.equals(" ")) &
(!coordinate12.equals(" ")) & (!coordinate22.equals(" "))) {
System.out.println("Draw");
System.out.println("\n" + coordinate00 + "|" + coordinate10 + "|" + coordinate20 + "\n" + "-----" + "\n" + coordinate01 + "|" + coordinate11 + "|" + coordinate21 + "\n" +"-----" + "\n" + coordinate02 + "|" + coordinate12 + "|" + coordinate22 + "\n");
return;
}
else { System.out.println("\n" + coordinate00 + "|" + coordinate10 + "|" + coordinate20 + "\n" + "-----" + "\n" + coordinate01 + "|" + coordinate11 + "|" + coordinate21 + "\n" +"-----" + "\n" + coordinate02 + "|" + coordinate12 + "|" + coordinate22 + "\n");
明らかに、このコードの最後のビットについては本当に愚かなことは、私は文字通りそのままの私でも「もし」ステートメントしかし、文の「もし」のループ条件「ながら」を繰り返すように持っていたということですまだ 'while'ループ自体の中にあります。私はこれをやらなければならなかった。なぜなら、ゲームが終わっていない場合にだけ、プログラムがボードをすぐにプリントするようにするための、より簡潔な方法を理解することができなかったからだ。
これをもっと簡単にする方法はありますが、それが可能かどうかは本当に分かりません。基本的には、以前の方法を使用する方法があるかどうかは疑問です'while'ステートメントのためにそれらをもう一度書くのではなく、whileループの条件。私は 'このif文の条件は、まだ有効な' while 'ループとまったく同じであると言っています。
この質問は回答できないかもしれませんが、これは不可能なことであることがわかっていると便利です。
これらの条件をすべてテストし、真または偽を返す関数を作成できます。 – Shadow
"*私はちょうどJavaプログラムの作成を終えました... *"これはJavaかJavaScriptですか? – RobG
条件の大きなリストを作成する –