Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-Noughts和Cross/Tic-Tac-Toe游戏获胜算法不起作用_Java_Arrays_If Statement - Fatal编程技术网

Java-Noughts和Cross/Tic-Tac-Toe游戏获胜算法不起作用

Java-Noughts和Cross/Tic-Tac-Toe游戏获胜算法不起作用,java,arrays,if-statement,Java,Arrays,If Statement,最近刚开始上大学,我们正在学习如何用Java编程。如果我们想要挑战的话,有人建议我们尝试用一段残破的代码制作一个零和十字形游戏 我设法让程序正常运行,X或O显示在电路板上,检查一行或一列中是否有三个相同的符号可以正常工作,但是出于某种原因,如果它检查任何一行上是否有三个相同的符号,它就不工作了,我无法找出原因。我问过朋友,他们也不明白为什么它不起作用(可能是我错过的一些明显的东西) 为了检查X或O是否赢了,我创建了另一个2D数组,将1放在板上X的位置,如果板上的位置是O,则将a-1放在板上。然后

最近刚开始上大学,我们正在学习如何用Java编程。如果我们想要挑战的话,有人建议我们尝试用一段残破的代码制作一个零和十字形游戏

我设法让程序正常运行,X或O显示在电路板上,检查一行或一列中是否有三个相同的符号可以正常工作,但是出于某种原因,如果它检查任何一行上是否有三个相同的符号,它就不工作了,我无法找出原因。我问过朋友,他们也不明白为什么它不起作用(可能是我错过的一些明显的东西)

为了检查X或O是否赢了,我创建了另一个2D数组,将1放在板上X的位置,如果板上的位置是O,则将a-1放在板上。然后检查行、列和对角线上是否有-1或1。如果存在-1,则为O向计数器添加1;如果存在-1,则为X向计数器添加1

在函数的末尾,它检查O或X的计数器是否等于三,如果等于三,则返回true,如果不等于,则返回false

下面是代码(大约315行代码,可以更容易地复制和粘贴整个程序,这样您就可以看到我是否在其他地方出错,向下滚动到底部,查看
checkxorhowaswan
函数中的损坏部分):

代码是:-

import java.util.Scanner;

public class NoughtsAndCrosses {

static int count[][] = new int[4][4];
static char board[][] = new char[4][4];
static String playerOneName;
static String playerTwoName;

static int xCoord;
static int yCoord;
static int noOfMoves;
static int checkO = 0;
static int checkX = 0;

static boolean validMove;
static boolean gameHasBeenWon;
static boolean gameHasBeenDrawn;

static char currentSymbol;

static Scanner sc = new Scanner(System.in);

public static void main(String[] args) {
    initialiseBoard();
    System.out.println("What is the name of player one? ");
    playerOneName = sc.next();
    System.out.println("What is the name of player two? ");
    playerTwoName = sc.next();

    currentSymbol = 'X';

    // Play a game
    noOfMoves = 0;
    gameHasBeenDrawn = false;
    gameHasBeenWon = false;

    System.out.println();
    displayBoard(board);
    System.out.println("\n" + playerOneName + " starts playing " + currentSymbol);
    System.out.println();

    do { //Play until a player wins or the game is drawn
        do { //Get a valid move

            xCoord = getX();
            yCoord = getY();
            System.out.println("");
            validMove = checkValidMove(xCoord, yCoord, board);
            if (!validMove) {
                System.out.println("Coordinates invalid, please try again");
            } // end if
        } while (!validMove);

        board[xCoord][yCoord] = currentSymbol;
        displayBoard(board);
        gameHasBeenWon = checkXOrOHasWon(board);
        noOfMoves++;

        if (!gameHasBeenWon) {
            // Check if maximum number of allowed moves has been reached
            if (noOfMoves == 9) {
                gameHasBeenDrawn = true;
            } else {
                if (currentSymbol == 'X') {
                    currentSymbol = 'O';
                    System.out.println(playerTwoName + "'s turn");
                } else {
                    currentSymbol = 'X';
                    System.out.println(playerOneName + "'s turn");
                } // end if/else
            } // end if/else
        } // end if
    } while (!gameHasBeenWon && !gameHasBeenDrawn);

    //Display result
    if (gameHasBeenWon) {
        if ('X' == currentSymbol) {
            System.out.println(playerOneName + " congratulations you win!");

        } else {
            System.out.println(playerTwoName + " congratulations you win!");

        }
    } else {
        System.out.println("A draw this time!");
    }
} //end method main

public static void initialiseBoard() {

}

public static void displayBoard(char[][] board) {
    int row;
    int column;
    System.out.println("  | 1 2 3 ");
    System.out.println("--+-------");

    for (row = 1; row <= 3; row++) {
        System.out.print(row + " | ");
        for (column = 1; column <= 3; column++) {
            System.out.print(board[column][row] + " ");
        } // end column
        System.out.println();
    } // end row
} // end method displayBoard

public static int getX() {
    System.out.println("Please enter an X coordinate");
    xCoord = sc.nextInt();

    return xCoord;
}

public static int getY() {
    System.out.println("Please enter an Y coordinate");
    yCoord = sc.nextInt();

    return yCoord;
}

public static boolean checkValidMove(int xCoordinate, int yCoordinate, char[][] board) {
    ////

    if (xCoordinate > board.length || yCoordinate > board.length || xCoordinate == 0 || yCoordinate == 0 || xCoordinate == 4 || yCoordinate == 4) {
        validMove = false;
    } else {
        validMove = true;
    }

    if (currentSymbol == 'O') {
        count[xCoordinate][yCoordinate] = -1;

    } else if (currentSymbol == 'X') {
        count[xCoordinate][yCoordinate] = 1;
    }

    return validMove;

} // end method checkValidMove

//THIS PART HERE IT SEEMS TO BE BROKEN FOR SOME REASON

public static boolean checkXOrOHasWon(char[][] board) {
    //ALL OF THE ROWS DON'T WORK
    //row 1
    for (int i = 1; i < 4; i++) {
        if (count[i][1] == -1) {
            checkO = checkO + 1;
        }
        if (count[i][1] == 1) {
            checkX = checkX + 1;
        }
    }

    if (checkO != 3) {
        checkO = 0;
    }
    if (checkX != 3) {
        checkX = 0;
    }
    //row 2

    for (int i = 1; i < 4; i++) {
        if (count[i][2] == -1) {
            checkO = checkO + 1;
        }
        if (count[i][2] == 1) {
            checkX = checkX + 1;
        }
    }

    if (checkO != 3) {
        checkO = 0;
    }
    if (checkX != 3) {
        checkX = 0;
    }
    //row 3
    for (int i = 1; i < 4; i++) {
        if (count[i][3] == -1) {
            checkO = checkO + 1;
        }
        if (count[i][3] == 1) {
            checkX = checkX + 1;
        }
    }

    if (checkO != 3) {
        checkO = 0;
    }
    if (checkX != 3) {
        checkX = 0;
    }

    //col 1
    for (int i = 1; i < 4; i++) {
        if (count[1][i] == -1) {
            checkO = checkO + 1;

        }
        if (count[1][i] == 1) {

            checkX = checkX + 1;
        }
    }

    if (checkO != 3) {
        checkO = 0;
    }

    if (checkX != 3) {
        checkX = 0;
    }

    //col 2
    for (int i = 1; i < 4; i++) {
        if (count[2][i] == -1) {
            checkO = checkO + 1;

        }
        if (count[2][i] == 1) {

            checkX = checkX + 1;
        }
    }

    if (checkO != 3) {
        checkO = 0;
    }

    if (checkX != 3) {
        checkX = 0;
    }

    //col 3
    for (int i = 1; i < 4; i++) {
        if (count[3][i] == -1) {
            checkO = checkO + 1;

        }
        if (count[3][i] == 1) {

            checkX = checkX + 1;
        }
    }

    if (checkO != 3) {
        checkO = 0;
    }

    if (checkX != 3) {
        checkX = 0;
    }

    //diag 1
    for (int i = 1; i < 4; i++) {
        if (count[i][i] == -1) {
            checkO = checkO + 1;
            break;
        }
        if (count[i][i] == 1) {

            checkX = checkX + 1;
            break;
        }

    }
    if (checkO != 3) {
        checkO = 0;
    }

    if (checkX != 3) {
        checkX = 0;
    }

    //diag 2
    for (int j = 2; j < 5; j++) {
        for (int i = 1; i < 4; i++) {
            if (count[i][j - 1] == -1) {
                checkO = checkO + 1;
                break;
            }
            if (count[i][j - 1] == 1) {

                checkX = checkX + 1;
                break;
            }
        }
    }

    if (checkO != 3) {
        checkO = 0;
    }

    if (checkX != 3) {
        checkX = 0;
    }

    if (checkX == 3 || checkO == 3) {
        gameHasBeenWon = true;
    } else {
        checkO = 0;
        checkX = 0;
        gameHasBeenWon = false;

    }

    return gameHasBeenWon;
  }

 }
import java.util.Scanner;
新公共阶级{
静态整数计数[][]=新整数[4][4];
静态字符板[][]=新字符[4][4];
静态字符串名称;
静态字符串播放器名称;
静态int xCoord;
静态内部协调;
静态int noOfMoves;
静态int checkO=0;
静态整数校验x=0;
静态布尔有效移动;
静态布尔对策;
静态布尔对策;
静态字符符号;
静态扫描仪sc=新扫描仪(System.in);
公共静态void main(字符串[]args){
initialiseBoard();
System.out.println(“玩家一的名字是什么?”);
PlayerName=sc.next();
System.out.println(“玩家二的名字是什么?”);
playerTwoName=sc.next();
currentSymbol='X';
//玩游戏
noOfMoves=0;
gameHasBeenDrawn=false;
gameHasBeenWon=false;
System.out.println();
显示板;
System.out.println(“\n”+PlayerName+“开始播放”+currentSymbol);
System.out.println();
玩{//,直到一名玩家获胜或比赛平局
{//是否得到有效的移动
xCoord=getX();
yCoord=getY();
System.out.println(“”);
validMove=检查validMove(xCoord、yCoord、board);
如果(!validMove){
System.out.println(“坐标无效,请重试”);
}//如果结束,则结束
}而(!validMove);
线路板[xCoord][yCoord]=当前符号;
显示板;
gameHasBeenWon=checkXOrOHasWon(董事会);
noOfMoves++;
如果(!gameHasBeenWon){
//检查是否已达到允许的最大移动次数
如果(noOfMoves==9){
gameHasBeenDrawn=true;
}否则{
如果(currentSymbol='X'){
currentSymbol='O';
System.out.println(playerTwoName+“’的回合”);
}否则{
currentSymbol='X';
System.out.println(PlayerName+“’s turn”);
}//如果结束/else
}//如果结束/else
}//如果结束,则结束
}而(!gameHasBeenWon&!gameHasBeenDrawn);
//显示结果
如果(gameHasBeenWon){
如果('X'==currentSymbol){
System.out.println(playerName+“恭喜你赢了!”);
}否则{
System.out.println(playerTwoName+“恭喜你赢了!”);
}
}否则{
System.out.println(“这次是抽签!”;
}
}//结束方法main
公共静态无效initialiseBoard(){
}
公共静态无效显示板(字符[][]板){
int行;
int列;
系统输出打印号(“| 1 2 3”);
System.out.println(“--+----”;
对于(row=1;row board.length | | xCoordinate==0 | | yCoordinate==0 | | xCoordinate==4 | | yCoordinate==4){
validMove=false;
}否则{
validMove=true;
}
如果(currentSymbol='O'){
计数[xCoordinate][yCoordinate]=-1;
}else if(currentSymbol=='X'){
计数[xCoordinate][yCoordinate]=1;
}
返回有效移动;
}//结束方法checkValidMove
//这里的这部分似乎因为某种原因而断裂了
公共静态布尔checkxorhoaswon(char[][]板){
//所有的行都不起作用
//第1行
对于(int i=1;i<4;i++){
如果(计数[i][1]=-1){
checkO=checkO+1;
}
如果(计数[i][1]==1){
checkX=checkX+1;
}
}
如果(检查!=3){
checkO=0;
}
如果(检查x!=3){
checkX=0;
}
//第2排
对于(int i=1;i<4;i++){
如果(计数[i][2]=-1){
checkO=checkO+1;
}
如果(计数[i][2]==1){
checkX=checkX+1;
}
}
如果(检查!=3){
checkO=0;
}
如果(检查x!=3){
checkX=0;
}
//第3排
对于(int i=1;i<4;i++){
如果(计数[i][3]=-1){
checkO=checkO+1;
}
如果(计数[i][3]==1){
checkX=checkX+1;
}
}
如果(检查!=3){
checkO=0;
}
如果(检查x!=3){
checkX=0;
}
//第1列
对于(int i=1;i<4;i++){
如果(计数[1][i]=-1){
checkO=checkO+1;
}
如果(计数[1][i]==1){
checkX=checkX+1;
}
}
如果(检查!=3){
checkO=0;
}
如果(检查x!=3){
checkX=0;
}
//第2列
用于(int i)=
if (checkX != 3) {
  checkX = 0;
}
if (checkX == 3) {
  return true;
}