Java tic tac toe,计算机can';t温(爪哇)

Java tic tac toe,计算机can';t温(爪哇),java,artificial-intelligence,Java,Artificial Intelligence,我正在用java编写一个井字游戏。我还没做完,但我已经做了一些事情,应该可以玩了。问题是,我已经完成了代码,所以计算机应该能够赢,但它不工作。当电脑连续三次显示“电脑赢了”时,它会继续播放 代码如下: import java.util.Scanner; import java.util.concurrent.ThreadLocalRandom;; public class Main { static int[][] gameBoard = new int[3][3]; static Scan

我正在用java编写一个井字游戏。我还没做完,但我已经做了一些事情,应该可以玩了。问题是,我已经完成了代码,所以计算机应该能够赢,但它不工作。当电脑连续三次显示“电脑赢了”时,它会继续播放

代码如下:

import java.util.Scanner;
import java.util.concurrent.ThreadLocalRandom;;

public class Main {

static int[][] gameBoard = new int[3][3];
static Scanner userInput = new Scanner(System.in);


public static void main(String[] args) {

    //initialize game board
    for(int x=0;x<3; x++){
        for(int i=0;i<3;i++){
            gameBoard[x][i] = 0;
        }
    }

    gameLoop();




}

static void gameLoop(){
    boolean loop = true;

    while(loop==true){
    displayBoard();
    playerMove();
    if(checkIfWin() == true){
        loop = false;
    }

    if(checkIfLose() == true)
        loop = false;

    computerInput();
    }

}

static void playerMove(){
    String playerInput;

    System.out.println();
    System.out.print("Your move: ");
    playerInput = userInput.next();

    if(playerInput.equals("a1")){
        if(gameBoard[0][0] == 0){
            gameBoard[0][0] = 1;
        }else{
            System.out.println("That one is already taken!");
        }

    }else if(playerInput.equals("a2")){
        if(gameBoard[1][0] == 0){
            gameBoard[1][0] = 1;
        }else{
            System.out.println("That one is already taken!");
        }
    }else if(playerInput.equals("a3")){
        if(gameBoard[2][0] == 0){
            gameBoard[2][0] = 1;
        }else{
            System.out.println("That one is already taken!");
        }
    }else if(playerInput.equals("b1")){
        if(gameBoard[0][1] == 0){
            gameBoard[0][1] = 1;
        }else{
            System.out.println("That one is already taken!");
        }
    }else if(playerInput.equals("b2")){
        if(gameBoard[1][1] == 0){
            gameBoard[1][1] = 1;
        }else{
            System.out.println("That one is already taken!");
        }
    }else if(playerInput.equals("b3")){
        if(gameBoard[2][1] == 0){
            gameBoard[2][1] = 1;
        }else{
            System.out.println("That one is already taken!");
        }
    }else if(playerInput.equals("c1")){
        if(gameBoard[0][2] == 0){
            gameBoard[0][2] = 1;
        }else{
            System.out.println("That one is already taken!");
        }
    }else if(playerInput.equals("c2")){
        if(gameBoard[1][2] == 0){
            gameBoard[1][2] = 1;
        }else{
            System.out.println("That one is already taken!");
        }
    }else if(playerInput.equals("c3")){
        if(gameBoard[2][2] == 0){
            gameBoard[2][2] = 1;
        }else{
            System.out.println("That one is already taken!");
        }
    }

}

static boolean checkIfLose(){
    if(gameBoard[0][0] == 2 && gameBoard[0][1] == 2 && gameBoard[0][2] == 2){
        displayBoard();
        System.out.println("\nComputer wins!");
        return true;
    }else if(gameBoard[1][0] == 2 && gameBoard[1][1] == 2 && gameBoard[1][2] == 2){
        displayBoard();
        System.out.println("\nComputer wins!");
        return true;
    }else if(gameBoard[2][0] == 2 && gameBoard[2][1] == 2 && gameBoard[2][2] == 2){
        displayBoard();
        System.out.println("\nComputer wins!");
        return true;
    }else if(gameBoard[0][1] == 2 && gameBoard[2][1] == 2 && gameBoard[2][1] == 2){
        System.out.println("\nComputer wins!");
        displayBoard();
        return true;
    }else if(gameBoard[0][0] == 2 && gameBoard[1][0] == 2 && gameBoard[2][0] == 2){
        displayBoard();
        System.out.println("\nComputer wins!");
        return true;
    }else if(gameBoard[2][0] == 2 && gameBoard[2][1] == 2 && gameBoard[2][2] == 2){
        displayBoard();
        System.out.println("\nComputer wins!");
        return true;
    }else if(gameBoard[0][2] == 2 && gameBoard[1][2] == 2 && gameBoard[2][2] == 2){
        displayBoard();
        System.out.println("\nComputer wins!");
        return true;
    }else if(gameBoard[0][0] == 2 && gameBoard[1][1] == 2 && gameBoard[2][2] == 2){
        displayBoard();
        System.out.println("\nComputer wins!");
        return true;
    }else if(gameBoard[0][2] == 2 && gameBoard[1][1] == 2 && gameBoard[2][0] == 2){
        displayBoard();
        System.out.println("\nComputer wins!");
        return true;
    }else{
        return false;
    }

}

static boolean checkIfWin(){
    if(gameBoard[0][0] == 1 && gameBoard[0][1] == 1 && gameBoard[0][2] == 1){
        displayBoard();
        System.out.println("\nYou win!");
        return true;
    }else if(gameBoard[1][0] == 1 && gameBoard[1][1] == 1 && gameBoard[1][2] == 1){
        displayBoard();
        System.out.println("\nYou win!");
        return true;
    }else if(gameBoard[2][0] == 1 && gameBoard[2][1] == 1 && gameBoard[2][2] == 1){
        displayBoard();
        System.out.println("\nYou win!");
        return true;
    }else if(gameBoard[0][1] == 1 && gameBoard[2][1] == 1 && gameBoard[2][1] == 1){
        System.out.println("\nYou win!");
        displayBoard();
        return true;
    }else if(gameBoard[0][0] == 1 && gameBoard[1][0] == 1 && gameBoard[2][0] == 1){
        displayBoard();
        System.out.println("\nYou win!");
        return true;
    }else if(gameBoard[2][0] == 1 && gameBoard[2][1] == 1 && gameBoard[2][2] == 1){
        displayBoard();
        System.out.println("\nYou win!");
        return true;
    }else if(gameBoard[0][2] == 1 && gameBoard[1][2] == 1 && gameBoard[2][2] == 1){
        displayBoard();
        System.out.println("\nYou win!");
        return true;
    }else if(gameBoard[0][0] == 1 && gameBoard[1][1] == 1 && gameBoard[2][2] == 1){
        displayBoard();
        System.out.println("\nYou win!");
        return true;
    }else if(gameBoard[0][2] == 1 && gameBoard[1][1] == 1 && gameBoard[2][0] == 1){
        displayBoard();
        System.out.println("\nYou win!");
        return true;
    }else{
        return false;
    }

}

static void displayBoard(){

    System.out.println("  A B C");
    for(int x=0; x<3; x++){
        if(x>0)
            System.out.println();
            System.out.print(x+1 + " ");
        for(int i=0; i<3; i++){

            if(i>0)
            System.out.print(" ");

        System.out.print(gameBoard[x][i]);
        }
    }
}

static void computerInput(){
    int x;
    int y;
    boolean loop = true;

    while(loop == true){

        x = 0;
        y = 0;

    x = ThreadLocalRandom.current().nextInt(0, 2 + 1);
    y = ThreadLocalRandom.current().nextInt(0, 2 + 1);


    if(gameBoard[y][x] == 0){
        gameBoard[y][x] = 2;
        loop = false;
    }

    }
}


}
import java.util.Scanner;
导入java.util.concurrent.ThreadLocalRandom;;
公共班机{
静态int[]gameBoard=新int[3][3];
静态扫描仪用户输入=新扫描仪(System.in);
公共静态void main(字符串[]args){
//初始化游戏板
对于(int x=0;x

为计算机输入添加循环检查,以确保如果游戏已在该迭代中完成,则不会触发新的移动@Sh4d0wsPlyr他们在那里?由于计算机输入在循环设置为false后运行,它肯定会在决策后发挥更大的作用,因为循环将完成其迭代。如果你用If(循环)包装计算机移动,它可能会解决你的问题。我刚刚使用了你的代码,得到了“计算机赢!”?问题是什么?谁对这个问题投了赞成票?!这是一个很好的例子,通过调试他自己的代码可以很容易地解决问题。@redFIVE:这是在我的手机上写的,所以请给我至少两分钟的时间,在你开始投反对票之前,在尝试预览代码后添加评论rt是从最初的帖子中复制出来的,只是添加它以显示正确的上下文。
static void gameLoop(){
    boolean loop = true;

    while(loop==true){
        displayBoard();
        playerMove();
        if(checkIfWin() == true){
            loop = false;
        }

        if(checkIfLose() == true)
            loop = false;

        If(loop){
            computerInput();
        }
    }

}