【问题标题】:can not get the right output in my java tictactoe game在我的 java tictactoe 游戏中无法获得正确的输出
【发布时间】:2015-11-11 18:04:52
【问题描述】:

大家好,我的作业真的需要帮助。我试过这样做,但我无法弄清楚。

起跑板:

1  2  3     

4  5  6     

7  8  9

结果愿望:

x  2  3

o  x  6

7  o  x

但是每次我执行时,只要有赢家,我总是会得到以下信息:

x 2 3

o x 6 

7 o 9

最后,如何计算获胜最多的玩家的胜率?

限制:

  • 井字游戏必须使用二维数组。 (我知道我没有使用二维数组,因为我不知道如何让编译器接受来自二维数组的 1-9 输入。)

  • 这个问题你不能使用类。

  • 如果你愿意,你可以使用静态方法。

    import java.util.Scanner;
    public class TicTacToe {    public static String answer = "yes";
    public static Scanner input = new Scanner(System.in);
    public static String getName(int noPlayer) {
        System.out.print("Enter name of Player " + noPlayer + ": ");
        return input.next();
    }
    
    public static int getMove(String board[], String player) {
        printBoard(board);
        System.out.print("Enter move for " + player + ": ");
        int move = input.nextInt() - 1;
        while (moveTaken(board, move)) {
            System.out.println("Move taken.");
            System.out.print("Enter move for " + player + ": ");
            move = input.nextInt() - 1;
        }
        return move;
    }
    public static String gameResult(String board[]) {
        final int checkWin[][] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8},
                                        {0, 3, 6}, {1, 4, 7}, {2, 5, 8},
                                        {0, 4, 8}, {2, 4, 6}};
        for (int[] i: checkWin) {
            if (board[i[0]].equals(board[i[1]]) && board[i[0]].equals(board[i[2]]) && board[i[1]].equals(board[i[2]])) {
                if (board[i[0]].equals("O")) {
                    return "X wins";
                }
                else {
                    return "O wins";
                }
            }
        }
        if (!board[0].equals("1") && !board[1].equals("2") && !board[2].equals("3") &&
            !board[3].equals("4") && !board[4].equals("5") && !board[5].equals("6") &&
            !board[6].equals("7") && !board[7].equals("8") && !board[8].equals("9")) {
            return "draw";
        }
        return "not completed";
    }
    public static boolean moveTaken(String board[], int move) {
        if (board[move].equals("O") || board[move].equals("X")) {
            return true;
        }
        return false;
    }
    public static void printBoard(String board[]) {
        System.out.println(" " + board[0] + " " + board[1] + " " + board[2] +
                           "\n" +
                           " " + board[3] + " " + board[4] + " " + board[5] +
                           "\n" +
                           " " + board[6] + " " + board[7] + " " + board[8]);
    }
    public static void conclusion(String result, String pO, String pX) {
        if (result.equals("O wins")) {
            System.out.println(pO + " wins!");
    
        }
        else if (result.equals("X wins")) {
            System.out.println(pX + " wins!");
        }
        else {
            System.out.println("Draw.");
        }
    }
    public static void main(String args[]) {
    
          String X = getName(1);
          String O = getName(2);
    
      int count = 1;
      do{   
    
        String nextPlayer = X;
        String board[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
        int move;
            while (gameResult(board).equals("not completed")) {
                move = getMove(board, nextPlayer);
                if (nextPlayer == X) {
                    board[move] = "X";
                    nextPlayer = O;
                }
                else {
                    board[move] = "O";
                    nextPlayer = X;
                }
            }
        System.out.println("game up to date: " + count);
    
       conclusion(gameResult(board), X, O);
    
        System.out.println("Do you want to play again? yes or no");
         answer = input.next();
         count++; 
    
    
    }
        while(answer.equalsIgnoreCase("yes"));
    
    
    
    
      }
    }
    

【问题讨论】:

  • 似乎是学校或拼贴问题。用堆栈溢出来解决那些学校问题是非常糟糕的。
  • 二维数组:String[][] field = new String[3][3]; & field[i][j] = String.valueOf((i*field.length)+j+1;
  • 谢谢!我还设法使它在 2darray =) 中工作

标签: java arrays tic-tac-toe


【解决方案1】:

在执行移动之前,您只能在getMove 中打印板。因此永远不会显示最后一步。

你应该在游戏结束时添加对printBoard的调用。

这是一个可能的添加位置:

...
System.out.println("game up to date: " + count);
printBoard(board);
conclusion(gameResult(board), X, O);
...

【讨论】:

  • 你能帮我添加一个计数器,让玩家在程序结束后获得的每场胜利都显示他们的比率吗?请
  • @anthony 好吧,您的 conclusion 方法可以返回一个表示谁获胜的整数(例如 1 - 第一个玩家获胜,0 - 平局,-1 第二个玩家获胜)。然后 main 方法可以使用该值来更新每个玩家获胜次数的计数器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 2017-10-07
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多