0
の結果を表示しています。私は現在、ゲームtic tac toeを作成するプログラムを作成しています。アプリは現在、2人のプレイヤーが行と列の番号を交互に入れてプレイしています。私がこのプログラムで抱えている主な問題は、1人が勝ったのか失ったのか、両方のプレーヤーが結んだのかの結果を表示することができないということです。もし誰かが私がこれをどのように解決できるかに関して何か提案があれば、それはすばらしいことになるでしょう。あなたの時間をもう一度ありがとう。tic tac toe app
import java.util.Scanner;
public class ticTacToeApp {
// 1. GAME CONSTANTS
static final int WIN = 1;
static final int LOSE = 0;
static final int TIE = 2;
static final int GAME_IN_PROGRESS = 3;
static final String PLAYER = "X";
static final String OPPONENT = "O";
static final String EMPTY = " ";
// 2. INPUT STREAM
static Scanner in;
public static void main(String[] args) {
// 3. BUILD THE TIC TAC TOE 3X3 BOARD OF STRINGS
String[][] board = { { EMPTY, EMPTY, EMPTY }, { EMPTY, EMPTY, EMPTY },{EMPTY, EMPTY, EMPTY } };
// 4. INSTANTIATE THE SCANNER FOR INPUT
in = new Scanner(System.in);
// 5. GAME ENGINE
drawBoard(board);
int moveResult = GAME_IN_PROGRESS; // STATUS OF THE GAME AND AFTER A
// MOVE
while (moveResult == GAME_IN_PROGRESS) {
// PLAYER MOVES AND BOARD IS CHECKED FOR A RESULT
getMove(board, PLAYER, in);
drawBoard(board);
if (moveResult != GAME_IN_PROGRESS)
break;
// OPPONENT MOVES AND THE BOARD IS CHECKED FOR A RESULT
getMove(board, OPPONENT, in);
drawBoard(board);
moveResult = boardResults(board);
}
// 6. ONCE THE GAME HAS ENDED, DISPLAY IT IS AS A WIN, LOSE, OR TIE.
if (moveResult == WIN)
System.out.println("You win.");
else if (moveResult == LOSE)
System.out.println("You lost.");
else
System.out.println("You tied.");
}
public static int boardResults(String[][] board) {
// TASK 1: BUILD AN ARRAY CONTAINING ALL THE ROW, COLUMN, AND
// DIAGONAL STRING ARRANGEMENTS ON THE CURRENT
// TIC TAC TOE BOARD.
String[] waysToWin = new String[8];
int i = 0; // INDEX TO wayToWin
for (int r = 0; r < 3; r++) {
String str = " ", stc = " ";
for (int c = 0; c < 3; c++) {
str += board[r][c];
stc += board[c][r];
}
waysToWin[i++] = str;
waysToWin[i++] = stc;
// ADD 2 DIAGONALS
waysToWin[i++] = board[0][0] + board[1][1] + board[2][2];
waysToWin[i++] = board[0][2] + board[1][1] + board[2][0];
// TASK 2. CHECK IF ANY OF THESE ARRANGEMENTS CONTAIN A WINNING
// "XXX" OR
// "OOO"
// NOTE: AN "XXX" IS WIN AND AN "OOO" IS LOSE.
for (int p = 0; p < 8; p++) {
if (waysToWin[p].equals("XXX"))
return WIN;
if (waysToWin[p].equals("OOO"))
return LOSE;
// TASK 3. CHECK IF THE BOARD IS FULL (TIE) OR IF THE GAME IS
// STILL IN
// PROGRESS
if (board[0][0] == EMPTY || board[0][1] == EMPTY || board[0][2] == EMPTY || board[1][0] == EMPTY
|| board[1][1] == EMPTY || board[1][2] == EMPTY || board[2][0] == EMPTY || board[2][1] == EMPTY
|| board[2][2] == EMPTY)
return GAME_IN_PROGRESS;
}
}
return i;
}
public static void drawBoard(String[][] board) {
for (int row = 0; row < board.length; row++) {
System.out.println("___________");
for (int col = 0; col < board[row].length; col++) {
System.out.print("|" + board[row][col] + " ");
}
System.out.println("| ");
}
System.out.println("___________");
}
public static void getMove(String[][] board, String whoseMove, Scanner in) {
int[] xy = new int[2];
for (;;) {
System.out.print("You are " + whoseMove + ". ");
System.out.println("Enter the row and column of your move: ");
xy[0] = in.nextInt();
xy[1] = in.nextInt();
if (board[xy[0]][xy[1]].equals(EMPTY))
break;
System.out.println("You must choose an empty space.");
}
board[xy[0]][xy[1]] = whoseMove;
}
}
あなたの最初の答えではあまりにも粗末なものではありません、はい。兄はあなたを見ています :) – Xorifelse