XO游戏永无止境

时间:2019-02-05 14:24:54

标签: java

永无止境的游戏

((我将添加一个方法来连续检查3个,我只想在arraon!=''((空格字符))结束时结束该操作

需要为我的班级制作x和o的游戏。如果我在每次移动后都未将取消数组设置为空,则永远不会结束。如果我重置它,将不会保存条目。

必须省去初始化方法。 它所做的只是在2d数组中循环,并将2d数组中的所有位置都设置为''(空格字符)。

    public static char[][] drawBoard(char[][] matrix, char[][] tempMatrix, int rowChoice, int colChoice, char player)
        {

            if(rowChoice == 0 && colChoice == 0 && matrix[0][0] == ' ')
                {
                    matrix[0][0] = player;
                    return matrix;
                }
            else if(matrix[rowChoice][colChoice] == ' ')
                {
                    matrix[rowChoice][colChoice] = player;
                    return matrix;
                }
            else 
                {
                    System.out.println("Cannot enter here. Already full.");
                    tempMatrix[0][0] = '0';
                    return tempMatrix;
                }
        }

    public static void sop(char[][] matrix)
        {
            System.out.println("\n   col \t\t0.\t1.\t2.");
            System.out.println("\nRow 0.\t\t" + matrix[0][0] + "\t" + matrix[0][1] + "\t" + matrix[0][2]);
            System.out.println("\n    1.\t\t" + matrix[1][0] + "\t" + matrix[1][1] + "\t" + matrix[1][2]);
            System.out.println("\n    2.\t\t" + matrix[2][0] + "\t" + matrix[2][1] + "\t" + matrix[2][2]);
        }

    public static void main(String[] args)
        {
            XOGame XO = new XOGame();
            Scanner xoIn = new Scanner(System.in);
            Scanner numIn = new Scanner(System.in);
            final int SIZE = 3;
            final int ROW = 3;
            final int COL = 3;
            final int AREA = ROW * COL;
            int rowChoice;
            int colChoice;
            boolean gameEndStatus;
            char player;
            char xoMatrix[][] = new char[ROW][COL];
            char tempMatrix[][] = new char[ROW][COL]; 

            // initialising matrices
            xoMatrix = XO.init(xoMatrix, ROW, COL, SIZE);
            tempMatrix = XO.init(tempMatrix, ROW, COL, SIZE);

            gameEndStatus = false;
            for(int i = 0; i < AREA && gameEndStatus == false; i++)
                {
                    System.out.print("X or O?\t");
                    player = xoIn.next().charAt(0);
                    System.out.print("Row?\t");
                    rowChoice = numIn.nextInt();
                    System.out.print("Column?\t");
                    colChoice = numIn.nextInt();

                    tempMatrix = drawBoard(xoMatrix, tempMatrix,rowChoice, colChoice, player);

                    if(tempMatrix[0][0] == '0')
                        {
                            //i--;
                        }
                    else
                        {
                            xoMatrix = tempMatrix;
                        }

                    // output 3x3 matrix
                    XO.sop(xoMatrix);

                          // if matrix is full, end game
                      if(i == AREA)
                        {
                          gameEndStatus = true;
                         }
                    //THIS IS THE INITIALISATION AFTER EACH MOVE
                    tempMatrix = XO.init(tempMatrix, ROW, COL, SIZE);
                }// for

            System.out.print("\n\nEnd of game\n\n");
            xoIn.close();
            numIn.close();
        } 

需要制作x和o的游戏。这个想法是,游戏将一直运行直到gameEndStatus == true并且i <3x3区域。 我发现问题是我从i拿走了1(与递增值相同),因此它将永远运行 但是除非我的控件数组的第一个位置== 0 .... tempMatrix[0][0] == 0,否则不应减去1。

更新: 所以我发现如果重复一遍又一遍是因为我没有将控件array(tempMatrix)重新初始化为零。 仍然有问题。 如果我将其重新初始化为零,则它不会将所有条目保存到xoMatrix中,它会删除所有先前的条目并仅输入新的矩阵

1 个答案:

答案 0 :(得分:0)

我发现了您的问题所在。您无需重新初始化tempMatrix,因为这将删除xoMatrix的所有值,这是因为存在“通过引用传递”的问题。这是有关“通过引用”的更多信息:

Is Java "pass-by-reference" or "pass-by-value"?

您的问题来自您在此处的声明:

if(i == AREA) { gameEndStatus = true; }

您需要更改它,以便我实际上是> =区域。

if(i >= AREA) { gameEndStatus = true; }