Мне сложно понять, как отобразить победителя в этой программе tic-tac-toe.
import java.util.*;
public class tic
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
boolean flag=false;
char[][] board =
{
{' ', ' ', ' '},
{' ', ' ', ' '},
{' ', ' ', ' '}
};
boolean done = false;
int player = 1;
int row = 0;
int col = 0;
while (flag != true)
{
checkForWinner(board);
System.out.println("Enter the row and column for your next move");
row = in.nextInt();
col = in.nextInt();
if (player == 1)
{
board[row][col] = 'X';
player = 2;
checkForWinner(board);
}
else
{
board[row][col] = 'O';
player = 1;
checkForWinner(board);
}
printBoard(board);
checkForWinner(board);
}
displayWinner(player, flag);
}
public static void printBoard(char[][] board)
{
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 3; col++)
{
System.out.print("|" + board[row][col] + "|");
}
System.out.println();
System.out.println("-------");
}
}
public static boolean checkForWinner(char[][] board)
{
// checkForWinner() method determines if a pattern of data stored
// in the 2 D char array indicates the a player has won the game.
boolean flag = false;
boolean flag1 = false;
boolean flag2 = false;
boolean flag3 = false;
boolean flag4 = false;
// checks the contents of each row for matching data
for (int i = 0; i <= 2; i++)
{
if ((board[i][0] == board[i][1] && board[i][1] == board[i][2]) && board[i][2] != ' ')
flag1 = true;
}
// checks the contents of each column for matching data
for (int j = 0; j <= 2; j++)
{
if ((board[0][j] == board[1][j] && board[1][j] == board[2][j]) && board[2][j] != ' ')
flag2 = true;
}
// checks the contents of one diagonal for matching data
if ((board[0][0] == board[1][1] && board[1][1] == board[2][2]) && board[2][2] != ' ')
flag3 = true;
// checks the contents of the other diagonal for matching data
if ((board[0][2] == board[1][1] && board[1][1] == board[2][0]) && board[2][0] != ' ')
flag4 = true;
// checks if any of the previous conditions evaluated to true
if (flag1 == true || flag2 == true || flag3 == true || flag4 == true)
flag = true;
// returns true if a winner was found; returns false is no winner
return flag;
} // end of checkForWinner method
public static void displayWinner(int player, boolean flag)
{
if (flag == true)
{
int currentplayer;
currentplayer=player;
System.out.println("The winner of the game is" +currentplayer);
}
}
}
Метод checkForWinner был предоставлен нам и не может быть изменен, из того, что я видел, он проверяет все возможные состояния выигрыша, не принимая во внимание игрока из-за этого, я как бы потерял то, как начать метод который будет отображать победителя.
Любой вклад в то, что я мог бы сделать с этим методом, был бы велик.
Спасибо за Ваше внимание.
Edit: добавлен метод displayWinner, который я пытался, который, похоже, не работает.
Вызов checkForWinner
после каждого хода. После того, как вы получите обратно true
, вы знаете, что тот, кто был последним для перемещения является победителем.
Это потому, что вы проверили доску до последнего хода, и в то время не было победителя (иначе вы бы вышли из игры раньше). Теперь, когда у нас есть победитель, тот, кто сделал последний ход, должен быть победителем.
Обратите внимание, что ваш текущий вызов checkForWinner
бесполезен, потому что вы проигнорировали возвращаемое значение. В настоящее время flag
остается неназначенным.
Призыв displayWinner
должен принять номер победителя, а не flag
.