Поиск победителя в Tic-Tac-Toe (Java с использованием 2-D массивов)

1

Мне сложно понять, как отобразить победителя в этой программе 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, который я пытался, который, похоже, не работает.

  • 0
    Очень похоже на ["Распечатать все возможные решения проблемы N-Queens."] [1] [1]: stackoverflow.com/questions/7730360/…
  • 0
    Если вы не можете изменить checkForWinner, сделайте другой, который возвращает победителя (здесь вы можете сделать что-то для ничьей)
Теги:
arrays
tic-tac-toe

1 ответ

1
Лучший ответ

Вызов checkForWinner после каждого хода. После того, как вы получите обратно true, вы знаете, что тот, кто был последним для перемещения является победителем.

Это потому, что вы проверили доску до последнего хода, и в то время не было победителя (иначе вы бы вышли из игры раньше). Теперь, когда у нас есть победитель, тот, кто сделал последний ход, должен быть победителем.

Обратите внимание, что ваш текущий вызов checkForWinner бесполезен, потому что вы проигнорировали возвращаемое значение. В настоящее время flag остается неназначенным.

Призыв displayWinner должен принять номер победителя, а не flag.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню