【问题标题】:Finding the winner in Tic-Tac-Toe (Java using 2-D arrays)在井字游戏中找到赢家(使用二维数组的 Java)
【发布时间】:2014-04-24 00:51:05
【问题描述】:

我不知道如何在这个井字游戏程序中显示游戏的获胜者。

 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 方法是提供给我们的,无法更改,据我所见,它会检查所有可能的获胜状态,而不考虑玩家,因此我有点不知道如何启动显示获胜者的方法。

任何关于我可以用该方法做什么的意见都会很棒。

感谢您的关注。

编辑:添加了我尝试过的 displayWinner 方法,但似乎不起作用。

【问题讨论】:

  • 非常类似于 ["Print all possible solution for N-Queens problem."][1] [1]: stackoverflow.com/questions/7730360/…
  • 如果你不能改变 checkForWinner 做另一个返回获胜者(在这里你也可以做一些平局)

标签: java arrays tic-tac-toe


【解决方案1】:

每回合后致电checkForWinner。一旦你回到true,你就知道谁是最后一个移动的就是赢家。

这是因为您在最后一步之前已经检查了棋盘,并且当时没有获胜者(否则您会更早退出游戏)。既然我们有了赢家,那么走最后一步的人一定是赢家。

请注意,您当前对checkForWinner 的调用是无用的,因为您忽略了返回值。目前,flag 仍未分配。

displayWinner 的调用需要取中奖号码,而不是flag

【讨论】:

    猜你喜欢
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 2012-01-13
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多