tic tac toe,电脑无法获胜(java)

时间:2016-01-18 18:00:09

标签: java artificial-intelligence

我在java中编写了一个tic tac toe游戏。我没有完成,但我做了一些事情,它应该几乎可以播放。问题是,我已经完成了代码,因此计算机应该能够获胜,但它已经完成了工作。当计算机连续三次出现时,它就会继续播放它应该说'#34;计算机获胜!"。

以下是代码:

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;
    }

    }
}


}

1 个答案:

答案 0 :(得分:1)

static void gameLoop(){
    boolean loop = true;

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

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

        If(loop){
            computerInput();
        }
    }

}

为计算机输入添加循环检查可确保如果游戏已在该迭代中结算,则不会触发新移动