TicTacToe AI Java

时间:2012-05-18 00:51:08

标签: java artificial-intelligence tic-tac-toe

所以这是一项大学任务,一切都已完成,除了AI不知道如何“取胜”并且它在开始时的动作并不像我想要的那样随机走到顶角,向下走。该任务只需要AI的两个规则,因为它可以“取胜”或“阻止胜利”。

当棋盘被填满时,游戏似乎也没有结束。它要求我选择我的行动。

我希望有些人可能会提出如何改进或指出我出错的建议。

非常感谢任何帮助。

这是戏剧

import java.util.Scanner;

public class play {



    public static void main(String[] args) {


        System.out.println("Welcome to Tickle Tackle Toe!!! :D");
        System.out.println();

        //creat markers
        String marker1 = "x";
        String marker2 = "o";
        boolean playAgain = true;

        Scanner s = new Scanner(System.in);



        //create player objects
        Human human = new Human();
        Computer computer = new Computer();

        while(playAgain){
        //run board setup
        set Setup = new set();

        Setup.createBoard();
        Setup.printBoard();

        System.out.println("please choose your marker");
        System.out.println("type 1 for 'x' or 2 for 'o'");

        //set markers
        if(s.nextInt() == 1){
         // create player objects
         human.setMarker("x");
         computer.setMarker("o");
        } 
        else
        {
        human.setMarker("o");
        computer.setMarker("x");

        }




    // determine who goes first
    int first = (int) (Math.random() * 2);





    boolean won = false;
    int turns = 0;

   if(first == 0){
   System.out.println("You go first!");
    System.out.println();
   while(!won){
    human.takeTurn(Setup.getBoard());
    turns++;
    Setup.printBoard();
    if(Setup.hasWon(Setup.getBoard())){
        won = true;
        System.out.println("Congrats you won!");
        }
        if(turns == 9){
        won = true;
        System.out.println("Its a draw!");
        break;
        }
    if(!won){
        computer.takeTurn(Setup.getBoard(), human);
        turns++;
        System.out.println();
        Setup.printBoard();
        System.out.println();
        if(Setup.hasWon(Setup.getBoard())){
            won = true;
            System.out.println("You lost!");
            }
            if(turns == 9){
        won = true;
        System.out.println("Its a draw!");
        break;
        }
        }

   }  // close while 1
  }
  else {

    System.out.println("Computer goes first!");
    System.out.println();
    while(!won){
    computer.takeTurn(Setup.getBoard(), human);
    turns++;
    Setup.printBoard();
    if(Setup.hasWon(Setup.getBoard())){
        won = true;
        System.out.println("You lost!");
        }
    if(!won){
        human.takeTurn(Setup.getBoard());
        turns++;
        System.out.println();
        Setup.printBoard();
        System.out.println();
        if(Setup.hasWon(Setup.getBoard())){
            won = true;
            System.out.println("Congrats you won!");
            }
        }



   }  // close while 2

  }

  System.out.println("Would you like to play again? Type 1 for yes or 2 to quit");
   System.out.println();
   if(s.nextInt() == 2){
   playAgain = false;
   }

  }

}
}

这是计算机类

class Computer extends player {

    public Computer(){

    }

    int boardsize = 3;


    public void takeTurn(String[][] board, Human human) {

    int vertical = 0;
    int horizontal = 0;
    int diagonal = 0;
    boolean mademove = false;

    // check if you can take a win horizontally
    for(int i = 0; i<3; i++){

        if(board[0][i].equals(board[1][i]) && board[0][i].equals(Marker)){

            if(board[2][i] != human.getMarker()){
            board[2][i] = Marker;
            mademove = true;
            return;
            }

        }

    }

    for(int i = 0; i<3; i++){

        if(board[2][i].equals(board[1][i]) && board[2][i].equals(Marker)){

            if(board[0][i] != human.getMarker()){
            board[0][i] = Marker;
            mademove = true;
            return;
            }

        }


    }


        // check if you can take a win vertically
    for(int i = 0; i<3; i++){

        if(board[i][0].equals(board[i][1]) && board[i][0].equals(Marker)){

            if(board[i][2] != human.getMarker()){
            board[i][2] = Marker;
            mademove = true;
            return;
            }

        }

    }

    for(int i = 0; i<3; i++){

        if(board[i][2].equals(board[i][1]) && board[i][2].equals(Marker)){

            if(board[i][0] != human.getMarker()){
            board[i][0] = Marker;
            mademove = true;
            return;
            }

        }

    }


    // check if you can take a win diagonally 


        if(board[0][0].equals(board[1][1]) && board[0][0].equals(Marker)){

            if(board[2][2] != human.getMarker()){
            board[2][2] = Marker;
            mademove = true;
            return;
            }
    }

        if(board[2][2].equals(board[1][1]) && board[2][2].equals(Marker)){

            if(board[0][0] != human.getMarker()){
            board[0][0] = Marker;
            mademove = true;
            return;
            }
    }

        if(board[0][0].equals(board[1][1]) && board[0][0].equals(Marker)){

            if(board[2][2] != human.getMarker()){
            board[2][2] = Marker;
            mademove = true;
            return;
            }
    }

        if(board[0][2].equals(board[1][1]) && board[0][2].equals(Marker)){

            if(board[2][0] != human.getMarker()){
            board[2][0] = Marker;
            mademove = true;
            return;
            }
    }

        if(board[2][0].equals(board[1][1]) && board[2][0].equals(Marker)){

            if(board[0][2] != human.getMarker()){
            board[0][2] = Marker;
            mademove = true;
            return;
            }
    }


    // BLOCKS!!!! //

    // check if you can block a win horizontally
    for(int i = 0; i<3; i++){

        if(board[0][i].equals(board[1][i]) && board[0][i].equals(human.getMarker())){
            if(board[2][i] != Marker){
            board[2][i] = Marker;
            mademove = true;
            return;
            }

        }

    }

    for(int i = 0; i<3; i++){

        if(board[2][i].equals(board[1][i]) && board[0][i].equals(human.getMarker())){

            if(board[0][i] != Marker){
            board[0][i] = Marker;
            mademove = true;
            return;
            }

        }


    }



    // check if you can block a win horizontally
    for(int i = 0; i<3; i++){

        if(board[i][0].equals(board[i][1]) && board[i][0].equals(human.getMarker())){

            if(board[i][2] != Marker){
            board[i][2] = Marker;
            mademove = true;
            return;
            }

        }

    }

    for(int i = 0; i<3; i++){

        if(board[i][2].equals(board[i][1]) && board[i][2].equals(human.getMarker())){

            if(board[i][0] != Marker){
            board[i][0] = Marker;
            mademove = true;
            return;
            }

        }

    }


    // check if you can block a win diagonally 


        if(board[0][0].equals(board[1][1]) && board[0][0].equals(human.getMarker())){

            if(board[2][2] != Marker){
            board[2][2] = Marker;
            mademove = true;
            return;
            }
    }

        if(board[2][2].equals(board[1][1]) && board[2][2].equals(human.getMarker())){

            if(board[0][0] != Marker){
            board[0][0] = Marker;
            mademove = true;
            return;
            }
    }

        if(board[0][0].equals(board[1][1]) && board[0][0].equals(human.getMarker())){
            board[2][2] = Marker;
            mademove = true;
            return;
    }

        if(board[0][2].equals(board[1][1]) && board[0][2].equals(human.getMarker())){

            if(board[2][0] != Marker){
            board[2][0] = Marker;
            mademove = true;
            return;
            }
    }

        if(board[2][0].equals(board[1][1]) && board[2][0].equals(human.getMarker())){

            if(board[0][2] != Marker){
            board[0][2] = Marker;
            mademove = true;
            return;
            }
    }




         // make random move if above rules dont apply
        for(int i = 0; i<3; i++){
        if(board[i][0] != "x" && board[i][0] != "o"){
            board[i][0] = Marker;
            return;
            }
        }
        for(int i = 0; i<3; i++){
        if(board[i][1] != "x" && board[i][0] != "o"){
            board[i][1] = Marker;
            return;
            }
        }
            for(int i = 0; i<3; i++){
        if(board[i][2] != "x" && board[i][0] != "o"){
            board[i][2] = Marker;
            return;
            }
        }


    }   
}

4 个答案:

答案 0 :(得分:2)

如果你通过放置第九件获胜,你将获得“你赢了”和“它是平局!”消息,我认为这不是预期的行为。如果你在第九回合失败也一样。另一方面,没有人赢得抽奖代码,这就是游戏没有结束的原因。这很容易解决:

if(!won){
    computer.takeTurn(Setup.getBoard(), human);
    turns++;
    System.out.println();
    Setup.printBoard();
    System.out.println();
    if(Setup.hasWon(Setup.getBoard())){
        won = true;
        System.out.println("You lost!");
    } else if (turns == 9){
        won = true;
        System.out.println("Its a draw!");
    }
}

关于进行随机移动,您当前的代码遍历所有九个图块,在它遇到的第一个空白点上放置一个标记,然后返回。您想要的是列出所有空白点,然后随机选择其中一个。或者,继续生成0到2之间的x和y坐标,检查它是否为空,如果是,则放置标记。

答案 1 :(得分:1)

所以我想在找到我为此做的旧代码之后回来并回答我是如何做到的。

它可能还远非完美,但它非常接近。

我从一个非常简单的玩家类开始,它将获得并设置标记。

public class player {

    public String Marker;

    // set marker method

    public void setMarker(String marker){

        Marker = marker;

    }

    //get marker method 

    public String getMarker(){

        return Marker;

    }

}

然后我添加了一个set类,它将在每次移动后设置并打印电路板。

import java.util.Random;
import java.util.Scanner;



public class set {

    // setup variables default board size and board
    private int N = 3;
    public String[][] board = new String [N][N];

    public boolean hasWon (String [] [] board){
        //horizontal 
        for(int i = 0; i<3; i++){
            if(board[i][0].equals(board[i][1]) && board[i][1].equals(board[i][2])){
                return true;
            }
        }
        //vertical
        for(int i = 0; i<3; i++){
            if(board [0][i].equals(board[1][i]) && board[1][i].equals(board[2][i])){
                return true;
            }
        }
        //diagonal
        if(board[0][0].equals(board[1][1]) && board[1][1].equals(board[2][2]) || board[2][0].equals(board[1][1]) && board[1][1].equals(board[0][2]))
            return true;
        return false;
    }


    int x = 1;

    public void createBoard(){
        for(int i = 0; i < board.length; i++){
            for(int j = 0; j < board.length; j++){
                board[i][j] = "" + (x);
                x++;
            }
        }
    }

    public void printBoard(){

        for(int i = 0; i < board.length; i++){
            for(int j = 0; j < board.length; j++){
                System.out.print("[" + board[i][j] + "]" + " ");

            }
            System.out.println();
        }

    }

    public String[][] getBoard(){

        return board;

    }



}

带有AI的计算机课程。

class Computer extends player {

public Computer(){

}

int boardsize = 3;


public void takeTurn(String[][] board, Human human) {

    int vertical = 0;
    int horizontal = 0;
    int diagonal = 0;
    boolean mademove = false;

    // check if you can take a win horizontally
    for(int i = 0; i<3; i++){

        if(board[0][i].equals(board[1][i]) && board[0][i].equals(Marker)){

            if(board[2][i] != human.getMarker() && board[2][i] != Marker){
                board[2][i] = Marker;
                mademove = true;
                return;
            }

        }

    }

    for(int i = 0; i<3; i++){

        if(board[2][i].equals(board[1][i]) && board[2][i].equals(Marker)){

            if(board[0][i] != human.getMarker() && board[0][i] != Marker){
                board[0][i] = Marker;
                mademove = true;
                return;
            }

        }


    }



    // check if you can take a win horizontally
    for(int i = 0; i<3; i++){

        if(board[i][0].equals(board[i][1]) && board[i][0].equals(Marker)){

            if(board[i][2] != human.getMarker() && board[i][2] != Marker){
                board[i][2] = Marker;
                mademove = true;
                return;
            }

        }

    }

    for(int i = 0; i<3; i++){

        if(board[i][2].equals(board[i][1]) && board[i][2].equals(Marker)){

            if(board[i][0] != human.getMarker() && board[i][0] != Marker){
                board[i][0] = Marker;
                mademove = true;
                return;
            }

        }

    }


    // check if you can take a win diagonally bottom


    if(board[0][0].equals(board[1][1]) && board[0][0].equals(Marker)){

        if(board[2][2] != human.getMarker() && board[2][2] != Marker){
            board[2][2] = Marker;
            mademove = true;
            return;
        }
    }

    if(board[2][2].equals(board[1][1]) && board[2][2].equals(Marker)){

        if(board[0][0] != human.getMarker() && board[0][0] != Marker){
            board[0][0] = Marker;
            mademove = true;
            return;
        }
    }

    if(board[0][0].equals(board[1][1]) && board[0][0].equals(Marker)){

        if(board[2][2] != human.getMarker() && board[2][2] != Marker){
            board[2][2] = Marker;
            mademove = true;
            return;
        }
    }

    if(board[0][2].equals(board[1][1]) && board[0][2].equals(Marker)){

        if(board[2][0] != human.getMarker() && board[2][0] != Marker){
            board[2][0] = Marker;
            mademove = true;
            return;
        }
    }

    if(board[2][0].equals(board[1][1]) && board[2][0].equals(Marker)){

        if(board[0][2] != human.getMarker() && board[0][2] != Marker){
            board[0][2] = Marker;
            mademove = true;
            return;
        }
    }


    // BLOCKS!!!! //

    // check if you can block a win horizontally
    for(int i = 0; i<3; i++){

        if(board[0][i].equals(board[1][i]) && board[0][i].equals(human.getMarker())){
            if(board[2][i] != Marker && board[2][i] != human.getMarker()){
                board[2][i] = Marker;
                mademove = true;
                return;
            }

        }

    }

    for(int i = 0; i<3; i++){

        if(board[2][i].equals(board[1][i]) && board[0][i].equals(human.getMarker())){

            if(board[0][i] != Marker && board[0][i] != human.getMarker()){
                board[0][i] = Marker;
                mademove = true;
                return;
            }

        }


    }

    // check if you can block a win vertically


    for(int i = 0; i<3; i++){

        if(board[i][0].equals(board[i][1]) && board[i][0].equals(human.getMarker())){

            if(board[i][2] != Marker && board[i][2] != human.getMarker()){
                board[i][2] = Marker;
                mademove = true;
                return;
            }

        }

    }

    for(int i = 0; i<3; i++){

        if(board[i][2].equals(board[i][1]) && board[i][2].equals(human.getMarker())){

            if(board[i][0] != Marker && board[i][0] != human.getMarker()){
                board[i][0] = Marker;
                mademove = true;
                return;
            }

        }

    }

    for(int i = 0; i<3; i++){

        if(board[2][i].equals(board[1][i]) && board[2][i].equals(human.getMarker())){

            if(board[0][i] != Marker && board[0][i] != human.getMarker()){
                board[0][i] = Marker;
                mademove = true;
                return;
            }

        }

    }



    // check if you can block a win diagonally 


    if(board[0][0].equals(board[1][1]) && board[0][0].equals(human.getMarker())){

        if(board[2][2] != Marker && board[2][2] != human.getMarker()){
            board[2][2] = Marker;
            mademove = true;
            return;
        }
    }

    if(board[2][2].equals(board[1][1]) && board[2][2].equals(human.getMarker())){

        if(board[0][0] != Marker && board[0][0] != human.getMarker()){
            board[0][0] = Marker;
            mademove = true;
            return;
        }
    }

    if(board[0][0].equals(board[1][1]) && board[0][0].equals(human.getMarker())){
        if(board[2][2] != Marker && board[2][2] != human.getMarker()){
            board[2][2] = Marker;
            mademove = true;
            return;
        }
    }

    if(board[0][2].equals(board[1][1]) && board[0][2].equals(human.getMarker())){

        if(board[2][0] != Marker && board[2][0] != human.getMarker()){
            board[2][0] = Marker;
            mademove = true;
            return;
        }
    }

    if(board[2][0].equals(board[1][1]) && board[2][0].equals(human.getMarker())){

        if(board[0][2] != Marker && board[0][2] != human.getMarker()){
            board[0][2] = Marker;
            mademove = true;
            return;
        }
    }




    // make random move if above rules dont apply
    int rand1 = 0;
    int rand2 = 0;

    while(!mademove){

        rand1 = (int) (Math.random() * 3);
        rand2 = (int) (Math.random() * 3);

        if(board[rand1][rand2] != "x" && board[rand1][rand2] != "o"){
            board[rand1][rand2] = Marker;
            mademove = true;        

        }

    }


}   

}

人类

import java.util.Scanner;

类人类扩展玩家{

public Human(){

}


public void takeTurn(String[][] board) {

    Scanner s = new Scanner(System.in);

    boolean turn = true;

    while(turn){
        System.out.println("please enter row");
        int row = s.nextInt();
        System.out.println("please enter col");
        int col = s.nextInt();
        System.out.print("you entered "+row+" "+col);
        System.out.println();
        if(board[row - 1][col - 1] != "x" && board[row - 1][col - 1] != "o"){
            board[row - 1][col - 1] = Marker;
            turn = false;
        } // closes if
        else {
            System.out.println("Already Marker here! please guess again!");
        }
    } // ends while
} // ends method

} // ends class

最后玩游戏。

    import java.util.Scanner;

public class play {



    public static void main(String[] args) {


        System.out.println("Welcome to Tickle Tackle Toe!!! :D");
        System.out.println();

        //creat markers
        String marker1 = "x";
        String marker2 = "o";
        boolean playAgain = true;

        Scanner s = new Scanner(System.in);



        //create player objects
        Human human = new Human();
        Computer computer = new Computer();

        while(playAgain){
            //run board setup
            set Setup = new set();

            Setup.createBoard();
            Setup.printBoard();

            System.out.println("please choose your marker");
            System.out.println("type 1 for 'x' or 2 for 'o'");

            //set markers
            if(s.nextInt() == 1){
                // create player objects
                human.setMarker("x");
                computer.setMarker("o");
            } 
            else
            {
                human.setMarker("o");
                computer.setMarker("x");

            }




            // determine who goes first
            int first = (int) (Math.random() * 2);





            boolean won = false;
            int turns = 0;

            if(first == 0){
                System.out.println("You gots the winz!");
                System.out.println();
                while(!won){
                    human.takeTurn(Setup.getBoard());
                    turns++;
                    Setup.printBoard();
                    if(Setup.hasWon(Setup.getBoard())){
                        won = true;
                        System.out.println("Congrats you won!");
                    }
                    if(turns == 9){
                        won = true;
                        System.out.println("Its a bore draw!");
                        break;
                    }
                    if(!won){
                        computer.takeTurn(Setup.getBoard(), human);
                        turns++;
                        System.out.println();
                        Setup.printBoard();
                        System.out.println();
                        if(Setup.hasWon(Setup.getBoard())){
                            won = true;
                            System.out.println("You just got pwned by an A.I with an incomplete rule set. FACEPALM.");
                        }
                        if(turns == 9){
                            won = true;
                            System.out.println("Its a bore draw!");
                            break;
                        }
                    }

                }  // close while 1
            }
            else {

                System.out.println("Computer goes first!");
                System.out.println();
                while(!won){
                    computer.takeTurn(Setup.getBoard(), human);
                    turns++;
                    Setup.printBoard();
                    if(Setup.hasWon(Setup.getBoard())){
                        won = true;
                        System.out.println("You just got pwned by an A.I with an incomplete rule set. FACEPALM.");
                    }
                    if(turns == 9){
                        won = true;
                        System.out.println("Its a draw!");
                        break;
                    }
                    if(!won){
                        human.takeTurn(Setup.getBoard());
                        turns++;
                        System.out.println();
                        Setup.printBoard();
                        System.out.println();
                        if(Setup.hasWon(Setup.getBoard())){
                            won = true;
                            System.out.println("You gots the winz!");
                        }
                        if(turns == 9){
                            won = true;
                            System.out.println("Its a draw!");
                            break;
                        }
                    }



                }  // close while 2

            }

            System.out.println("Would you like to play again? Type 1 for yes or 2 to quit");
            System.out.println();
            if(s.nextInt() == 2){
                playAgain = false;
            }

        }

    }
}

答案 2 :(得分:0)

tttc是我的TicTacToeComputer类的一个对象,
  button []数组定义在TicTacToeComputer,
TicTacToePlayer是我的另一个具有静态int变量'count'的类,
TicTacToePlayer有三个布尔静态变量名称winX,winY和win,

    static void move() // easiest way for move method for Artificial intelligence and study how its work and then you can use loops optimize for the code 
          {
            if ((tttc.button[0].getText().equals("O")) && (tttc.button[1].getText().equals("O")) && (tttc.button[2].getText().equals("")))
            {
              tttc.button[2].setText(TicTacToeComputer.letterO);
              tttc.button[2].setIcon(new ImageIcon("o.gif"));
              tttc.button[2].setEnabled(false);
            }
            else if ((tttc.button[3].getText().equals("O")) && (tttc.button[4].getText().equals("O")) && (tttc.button[5].getText().equals("")))
            {
              tttc.button[5].setText(TicTacToeComputer.letterO);
              tttc.button[5].setIcon(new ImageIcon("o.gif"));
              tttc.button[5].setEnabled(false);
            }
            else if ((tttc.button[6].getText().equals("O")) && (tttc.button[7].getText().equals("O")) && (tttc.button[8].getText().equals("")))
            {
              tttc.button[8].setText(TicTacToeComputer.letterO);
              tttc.button[8].setIcon(new ImageIcon("o.gif"));
              tttc.button[8].setEnabled(false);
            }
            else if ((tttc.button[1].getText().equals("O")) && (tttc.button[2].getText().equals("O")) && (tttc.button[0].getText().equals("")))
            {
              tttc.button[0].setText(TicTacToeComputer.letterO);
              tttc.button[0].setIcon(new ImageIcon("o.gif"));
              tttc.button[0].setEnabled(false);
            }
            else if ((tttc.button[4].getText().equals("O")) && (tttc.button[5].getText().equals("O")) && (tttc.button[3].getText().equals("")))
            {
              tttc.button[3].setText(TicTacToeComputer.letterO);
              tttc.button[3].setIcon(new ImageIcon("o.gif"));
              tttc.button[3].setEnabled(false);
            }
            else if ((tttc.button[7].getText().equals("O")) && (tttc.button[8].getText().equals("O")) && (tttc.button[6].getText().equals("")))
            {
              tttc.button[6].setText(TicTacToeComputer.letterO);
              tttc.button[6].setIcon(new ImageIcon("o.gif"));
              tttc.button[6].setEnabled(false);
            }
            else if ((tttc.button[0].getText().equals("O")) && (tttc.button[2].getText().equals("O")) && (tttc.button[1].getText().equals("")))
            {
              tttc.button[1].setText(TicTacToeComputer.letterO);
              tttc.button[1].setIcon(new ImageIcon("o.gif"));
              tttc.button[1].setEnabled(false);
            }
            else if ((tttc.button[3].getText().equals("O")) && (tttc.button[5].getText().equals("O")) && (tttc.button[4].getText().equals("")))
            {
              tttc.button[4].setText(TicTacToeComputer.letterO);
              tttc.button[4].setIcon(new ImageIcon("o.gif"));
              tttc.button[4].setEnabled(false);
            }
            else if ((tttc.button[6].getText().equals("O")) && (tttc.button[8].getText().equals("O")) && (tttc.button[7].getText().equals("")))
            {
              tttc.button[7].setText(TicTacToeComputer.letterO);
              tttc.button[7].setIcon(new ImageIcon("o.gif"));
              tttc.button[7].setEnabled(false);
            }
            else if ((tttc.button[0].getText().equals("O")) && (tttc.button[3].getText().equals("O")) && (tttc.button[6].getText().equals("")))
            {
              tttc.button[6].setText(TicTacToeComputer.letterO);
              tttc.button[6].setIcon(new ImageIcon("o.gif"));
              tttc.button[6].setEnabled(false);
            }
            else if ((tttc.button[1].getText().equals("O")) && (tttc.button[4].getText().equals("O")) && (tttc.button[7].getText().equals("")))
            {
              tttc.button[7].setText(TicTacToeComputer.letterO);
              tttc.button[7].setIcon(new ImageIcon("o.gif"));
              tttc.button[7].setEnabled(false);
            }
            else if ((tttc.button[2].getText().equals("O")) && (tttc.button[5].getText().equals("O")) && (tttc.button[8].getText().equals("")))
            {
              tttc.button[8].setText(TicTacToeComputer.letterO);
              tttc.button[8].setIcon(new ImageIcon("o.gif"));
              tttc.button[8].setEnabled(false);
            }
            else if ((tttc.button[3].getText().equals("O")) && (tttc.button[6].getText().equals("O")) && (tttc.button[0].getText().equals("")))
            {
              tttc.button[0].setText(TicTacToeComputer.letterO);
              tttc.button[0].setIcon(new ImageIcon("o.gif"));
              tttc.button[0].setEnabled(false);
            }
            else if ((tttc.button[4].getText().equals("O")) && (tttc.button[7].getText().equals("O")) && (tttc.button[1].getText().equals("")))
            {
              tttc.button[1].setText(TicTacToeComputer.letterO);
              tttc.button[1].setIcon(new ImageIcon("o.gif"));
              tttc.button[1].setEnabled(false);
            }
            else if ((tttc.button[5].getText().equals("O")) && (tttc.button[8].getText().equals("O")) && (tttc.button[2].getText().equals("")))
            {
              tttc.button[2].setText(TicTacToeComputer.letterO);
              tttc.button[2].setIcon(new ImageIcon("o.gif"));
              tttc.button[2].setEnabled(false);
            }
            else if ((tttc.button[0].getText().equals("O")) && (tttc.button[6].getText().equals("O")) && (tttc.button[3].getText().equals("")))
            {
              tttc.button[3].setText(TicTacToeComputer.letterO);
              tttc.button[3].setIcon(new ImageIcon("o.gif"));
              tttc.button[3].setEnabled(false);
            }
            else if ((tttc.button[1].getText().equals("O")) && (tttc.button[7].getText().equals("O")) && (tttc.button[4].getText().equals("")))
            {
              tttc.button[4].setText(TicTacToeComputer.letterO);
              tttc.button[4].setIcon(new ImageIcon("o.gif"));
              tttc.button[4].setEnabled(false);
            }
            else if ((tttc.button[2].getText().equals("O")) && (tttc.button[8].getText().equals("O")) && (tttc.button[5].getText().equals("")))
            {
              tttc.button[5].setText(TicTacToeComputer.letterO);

              tttc.button[5].setIcon(new ImageIcon("o.gif"));
              tttc.button[5].setEnabled(false);
            }
            else if ((tttc.button[0].getText().equals("O")) && (tttc.button[4].getText().equals("O")) && (tttc.button[8].getText().equals("")))
            {
              tttc.button[8].setText(TicTacToeComputer.letterO);
              tttc.button[8].setIcon(new ImageIcon("o.gif"));
              tttc.button[8].setEnabled(false);
            }
            else if ((tttc.button[4].getText().equals("O")) && (tttc.button[8].getText().equals("O")) && (tttc.button[0].getText().equals("")))
            {
              tttc.button[0].setText(TicTacToeComputer.letterO);
              tttc.button[0].setIcon(new ImageIcon("o.gif"));
              tttc.button[0].setEnabled(false);
            }
            else if ((tttc.button[0].getText().equals("O")) && (tttc.button[8].getText().equals("O")) && (tttc.button[4].getText().equals("")))
            {
              tttc.button[4].setText(TicTacToeComputer.letterO);
              tttc.button[4].setIcon(new ImageIcon("o.gif"));
              tttc.button[4].setEnabled(false);
            }
            else if ((tttc.button[2].getText().equals("O")) && (tttc.button[4].getText().equals("O")) && (tttc.button[6].getText().equals("")))
            {
              tttc.button[6].setText(TicTacToeComputer.letterO);
              tttc.button[6].setIcon(new ImageIcon("o.gif"));
              tttc.button[6].setEnabled(false);
            }
            else if ((tttc.button[6].getText().equals("O")) && (tttc.button[4].getText().equals("O")) && (tttc.button[2].getText().equals("")))
            {
              tttc.button[2].setText(TicTacToeComputer.letterO);
              tttc.button[2].setIcon(new ImageIcon("o.gif"));
              tttc.button[2].setEnabled(false);
            }
            else if ((tttc.button[6].getText().equals("O")) && (tttc.button[2].getText().equals("O")) && (tttc.button[4].getText().equals("")))
            {
              tttc.button[4].setText(TicTacToeComputer.letterO);
              tttc.button[4].setIcon(new ImageIcon("o.gif"));
              tttc.button[4].setEnabled(false);
            }
            if ((tttc.button[0].getText().equals("X")) && (tttc.button[1].getText().equals("X")) && (tttc.button[2].getText().equals("")))
            {
              tttc.button[2].setText(TicTacToeComputer.letterO);
              tttc.button[2].setIcon(new ImageIcon("o.gif"));
              tttc.button[2].setEnabled(false);
            }
            else if ((tttc.button[3].getText().equals("X")) && (tttc.button[4].getText().equals("X")) && (tttc.button[5].getText().equals("")))
            {
              tttc.button[5].setText(TicTacToeComputer.letterO);
              tttc.button[5].setIcon(new ImageIcon("o.gif"));
              tttc.button[5].setEnabled(false);
            }
            else if ((tttc.button[6].getText().equals("X")) && (tttc.button[7].getText().equals("X")) && (tttc.button[8].getText().equals("")))
            {
              tttc.button[8].setText(TicTacToeComputer.letterO);
              tttc.button[8].setIcon(new ImageIcon("o.gif"));
              tttc.button[8].setEnabled(false);
            }
            else if ((tttc.button[1].getText().equals("X")) && (tttc.button[2].getText().equals("X")) && (tttc.button[0].getText().equals("")))
            {
              tttc.button[0].setText(TicTacToeComputer.letterO);
              tttc.button[0].setIcon(new ImageIcon("o.gif"));
              tttc.button[0].setEnabled(false);
            }
            else if ((tttc.button[4].getText().equals("X")) && (tttc.button[5].getText().equals("X")) && (tttc.button[3].getText().equals("")))
            {
              tttc.button[3].setText(TicTacToeComputer.letterO);
              tttc.button[3].setIcon(new ImageIcon("o.gif"));
              tttc.button[3].setEnabled(false);
            }
            else if ((tttc.button[7].getText().equals("X")) && (tttc.button[8].getText().equals("X")) && (tttc.button[6].getText().equals("")))
            {
              tttc.button[6].setText(TicTacToeComputer.letterO);

              tttc.button[6].setIcon(new ImageIcon("o.gif"));
              tttc.button[6].setEnabled(false);
            }
            else if ((tttc.button[0].getText().equals("X")) && (tttc.button[2].getText().equals("X")) && (tttc.button[1].getText().equals("")))
            {
              tttc.button[1].setText(TicTacToeComputer.letterO);
              tttc.button[1].setIcon(new ImageIcon("o.gif"));
              tttc.button[1].setEnabled(false);
            }
            else if ((tttc.button[3].getText().equals("X")) && (tttc.button[5].getText().equals("X")) && (tttc.button[4].getText().equals("")))
            {
              tttc.button[4].setText(TicTacToeComputer.letterO);
              tttc.button[4].setIcon(new ImageIcon("o.gif"));
              tttc.button[4].setEnabled(false);
            }
            else if ((tttc.button[6].getText().equals("X")) && (tttc.button[8].getText().equals("X")) && (tttc.button[7].getText().equals("")))
            {
              tttc.button[7].setText(TicTacToeComputer.letterO);
              tttc.button[7].setIcon(new ImageIcon("o.gif"));
              tttc.button[7].setEnabled(false);
            }
            else if ((tttc.button[0].getText().equals("X")) && (tttc.button[3].getText().equals("X")) && (tttc.button[6].getText().equals("")))
            {
              tttc.button[6].setText(TicTacToeComputer.letterO);
              tttc.button[6].setIcon(new ImageIcon("o.gif"));
              tttc.button[6].setEnabled(false);
            }
            else if ((tttc.button[1].getText().equals("X")) && (tttc.button[4].getText().equals("X")) && (tttc.button[7].getText().equals("")))
            {
              tttc.button[7].setText(TicTacToeComputer.letterO);
              tttc.button[7].setIcon(new ImageIcon("o.gif"));
              tttc.button[7].setEnabled(false);
            }
            else if ((tttc.button[2].getText().equals("X")) && (tttc.button[5].getText().equals("X")) && (tttc.button[8].getText().equals("")))
            {
              tttc.button[8].setText(TicTacToeComputer.letterO);
              tttc.button[8].setIcon(new ImageIcon("o.gif"));
              tttc.button[8].setEnabled(false);
            }
            else if ((tttc.button[3].getText().equals("X")) && (tttc.button[6].getText().equals("X")) && (tttc.button[0].getText().equals("")))
            {
              tttc.button[0].setText(TicTacToeComputer.letterO);
              tttc.button[0].setIcon(new ImageIcon("o.gif"));
              tttc.button[0].setEnabled(false);
            }
            else if ((tttc.button[4].getText().equals("X")) && (tttc.button[7].getText().equals("X")) && (tttc.button[1].getText().equals("")))
            {
              tttc.button[1].setText(TicTacToeComputer.letterO);
              tttc.button[1].setIcon(new ImageIcon("o.gif"));
              tttc.button[1].setEnabled(false);
            }
            else if ((tttc.button[5].getText().equals("X")) && (tttc.button[8].getText().equals("X")) && (tttc.button[2].getText().equals("")))
            {
              tttc.button[2].setText(TicTacToeComputer.letterO);
              tttc.button[2].setIcon(new ImageIcon("o.gif"));
              tttc.button[2].setEnabled(false);
            }
            else if ((tttc.button[0].getText().equals("X")) && (tttc.button[6].getText().equals("X")) && (tttc.button[3].getText().equals("")))
            {
              tttc.button[3].setText(TicTacToeComputer.letterO);
              tttc.button[3].setIcon(new ImageIcon("o.gif"));
              tttc.button[3].setEnabled(false);
            }
            else if ((tttc.button[1].getText().equals("X")) && (tttc.button[7].getText().equals("X")) && (tttc.button[4].getText().equals("")))
            {
              tttc.button[4].setText(TicTacToeComputer.letterO);
              tttc.button[4].setIcon(new ImageIcon("o.gif"));
              tttc.button[4].setEnabled(false);
            }
            else if ((tttc.button[2].getText().equals("X")) && (tttc.button[8].getText().equals("X")) && (tttc.button[5].getText().equals("")))
            {
              tttc.button[5].setText(TicTacToeComputer.letterO);
              tttc.button[5].setIcon(new ImageIcon("o.gif"));
              tttc.button[5].setEnabled(false);
            }
            else if ((tttc.button[0].getText().equals("X")) && (tttc.button[4].getText().equals("X")) && (tttc.button[8].getText().equals("")))
            {
              tttc.button[8].setText(TicTacToeComputer.letterO);
              tttc.button[8].setIcon(new ImageIcon("o.gif"));
              tttc.button[8].setEnabled(false);
            }
            else if ((tttc.button[4].getText().equals("X")) && (tttc.button[8].getText().equals("X")) && (tttc.button[0].getText().equals("")))
            {
              tttc.button[0].setText(TicTacToeComputer.letterO);
              tttc.button[0].setIcon(new ImageIcon("o.gif"));
              tttc.button[0].setEnabled(false);
            }
            else if ((tttc.button[0].getText().equals("X")) && (tttc.button[8].getText().equals("X")) && (tttc.button[4].getText().equals("")))
            {
              tttc.button[4].setText(TicTacToeComputer.letterO);
              tttc.button[4].setIcon(new ImageIcon("o.gif"));
              tttc.button[4].setEnabled(false);
            }
            else if ((tttc.button[2].getText().equals("X")) && (tttc.button[4].getText().equals("X")) && (tttc.button[6].getText().equals("")))
            {
              tttc.button[6].setText(TicTacToeComputer.letterO);

              tttc.button[6].setIcon(new ImageIcon("o.gif"));
              tttc.button[6].setEnabled(false);
            }
            else if ((tttc.button[6].getText().equals("X")) && (tttc.button[4].getText().equals("X")) && (tttc.button[2].getText().equals("")))
            {
              tttc.button[2].setText(TicTacToeComputer.letterO);
              tttc.button[2].setIcon(new ImageIcon("o.gif"));
              tttc.button[2].setEnabled(false);
            }
            else if ((tttc.button[6].getText().equals("X")) && (tttc.button[2].getText().equals("X")) && (tttc.button[4].getText().equals("")))
            {
              tttc.button[4].setText(TicTacToeComputer.letterO);
              tttc.button[4].setIcon(new ImageIcon("o.gif"));
              tttc.button[4].setEnabled(false);
            }
            else if ((tttc.button[0].getText().equals("X")) && (tttc.button[4].getText().equals("O")) && (tttc.button[8].getText().equals("X")))
            {
              tttc.button[5].setText(TicTacToeComputer.letterO);
              tttc.button[5].setIcon(new ImageIcon("o.gif"));
              tttc.button[5].setEnabled(false);
            }
            else if ((tttc.button[2].getText().equals("X")) && (tttc.button[4].getText().equals("O")) && (tttc.button[6].getText().equals("X")))
            {
              tttc.button[3].setText(TicTacToeComputer.letterO);
              tttc.button[3].setIcon(new ImageIcon("o.gif"));
              tttc.button[3].setEnabled(false);
            }
            else if (tttc.button[4].getText().equals(""))
            {
              tttc.button[4].setText(TicTacToeComputer.letterO);
              tttc.button[4].setIcon(new ImageIcon("o.gif"));
              tttc.button[4].setEnabled(false);
            }
            else if (tttc.button[0].getText().equals(""))
            {
              tttc.button[0].setText(TicTacToeComputer.letterO);
              tttc.button[0].setIcon(new ImageIcon("o.gif"));
              tttc.button[0].setEnabled(false);
            }
            else
            {
              random();
            }
          }       




            static void random() // random method so that player and computer both have chance to win
                  {
                    if (TicTacToePlayer.count < 9)
                    {
                      int i = 0;
                      while (i == 0) {
                        i = (int)(Math.random() * 9.0D);
                      }
                      if (doRandomMove(tttc.button[i]))
                      {
                        tttc.button[i].setText(TicTacToeComputer.letterO);
                        tttc.button[i].setIcon(new ImageIcon("o.gif"));
                        tttc.button[i].setEnabled(false);
                      }
                      else
                      {
                        random();
                      }
                    }
                  }

                  public static boolean doRandomMove(JButton paramJButton)
                  {
                    if ((paramJButton.getText().equals("O")) || (paramJButton.getText().equals("X"))) {
                      return false;
                    }
                    return true;
                  }

    static void checkComputerWin()
      {
        if ((tttc.button[0].getText() == "X") && (tttc.button[1].getText() == "X") && (tttc.button[2].getText() == "X"))
        {
          TicTacToePlayer.winX = true;
        }
        else if ((tttc.button[3].getText() == "X") && (tttc.button[4].getText() == "X") && (tttc.button[5].getText() == "X"))
        {
          TicTacToePlayer.winX = true;
        }
        else if ((tttc.button[6].getText() == "X") && (tttc.button[7].getText() == "X") && (tttc.button[8].getText() == "X"))
        {
          TicTacToePlayer.winX = true;
        }
        else if ((tttc.button[0].getText() == "X") && (tttc.button[3].getText() == "X") && (tttc.button[6].getText() == "X"))
        {
          TicTacToePlayer.winX = true;
        }
        else if ((tttc.button[1].getText() == "X") && (tttc.button[4].getText() == "X") && (tttc.button[7].getText() == "X"))
        {
          TicTacToePlayer.winX = true;
        }
        else if ((tttc.button[2].getText() == "X") && (tttc.button[5].getText() == "X") && (tttc.button[8].getText() == "X"))
        {
          TicTacToePlayer.winX = true;
        }
        else if ((tttc.button[0].getText() == "X") && (tttc.button[4].getText() == "X") && (tttc.button[8].getText() == "X"))
        {
          TicTacToePlayer.winX = true;
        }
        else if ((tttc.button[2].getText() == "X") && (tttc.button[4].getText() == "X") && (tttc.button[6].getText() == "X"))
        {
          TicTacToePlayer.winX = true;
        }
        else if ((tttc.button[0].getText() == "O") && (tttc.button[1].getText() == "O") && (tttc.button[2].getText() == "O"))
        {
          TicTacToePlayer.winO = true;
        }
        else if ((tttc.button[3].getText() == "O") && (tttc.button[4].getText() == "O") && (tttc.button[5].getText() == "O"))
        {
          TicTacToePlayer.winO = true;
        }
        else if ((tttc.button[6].getText() == "O") && (tttc.button[7].getText() == "O") && (tttc.button[8].getText() == "O"))
        {
          TicTacToePlayer.winO = true;
        }
        else if ((tttc.button[0].getText() == "O") && (tttc.button[3].getText() == "O") && (tttc.button[6].getText() == "O"))
        {
          TicTacToePlayer.winO = true;
        }
        else if ((tttc.button[1].getText() == "O") && (tttc.button[4].getText() == "O") && (tttc.button[7].getText() == "O"))
        {
          TicTacToePlayer.winO = true;
        }
        else if ((tttc.button[2].getText() == "O") && (tttc.button[5].getText() == "O") && (tttc.button[8].getText() == "O"))
        {
          TicTacToePlayer.winO = true;
        }
        else if ((tttc.button[0].getText() == "O") && (tttc.button[4].getText() == "O") && (tttc.button[8].getText() == "O"))
        {
          TicTacToePlayer.winO = true;
        }
        else if ((tttc.button[2].getText() == "O") && (tttc.button[4].getText() == "O") && (tttc.button[6].getText() == "O"))
        {
          TicTacToePlayer.winO = true;
        }
        else
        {
          TicTacToePlayer.win = false;
          TicTacToePlayer.count += 1;
        }
        if ((!TicTacToePlayer.win) && (TicTacToePlayer.count > 8))
        {
          ImageIcon localImageIcon1 = new ImageIcon("cry.gif");
          JOptionPane.showMessageDialog(null, "The game was tie!", "Tie Game", 0, localImageIcon1);
          ImageIcon localImageIcon2 = new ImageIcon("newgame.gif");
          int i = JOptionPane.showConfirmDialog(null, "Start", "Do you want to start a New Game ?", 0, 0, localImageIcon2);
          if (i == 0)
          {
            TicTacToePlayer.count = 0;
            tttc.setVisible(false);
            new TicTacToeComputer("Wanna Play TicTacToe...!!!");
          }
          else
          {
            ImageIcon localImageIcon3 = new ImageIcon("bye.gif");
            JOptionPane.showMessageDialog(null, "Thank you " + TicTacToePlayer.x + " and " + TicTacToePlayer.z + " for playing", "Thank You", 1, localImageIcon3);
            System.exit(0);
          }
        }
        if (TicTacToePlayer.winX == true)
        {
          TicTacToePlayer.count = 0;
          tttc.setVisible(false);
          new AnimationComputerX();
          TicTacToePlayer.winX = false;
        }
        if (TicTacToePlayer.winO == true)
        {
          TicTacToePlayer.count = 0;
          tttc.setVisible(false);
          new AnimationComputerO();
          TicTacToePlayer.winO = false;
        }
      }

快乐编码:) RChadZ

答案 3 :(得分:-1)

//diagonal
if(board[0][0].equals(board[1][1]) && board[1][1].equals(board[2][2]) || board[2][0].equals(board[1][1]) && board[1][1].equals(board[0][2]))
       { return true;} // <<<<<you forgot the {} ^_^
    return false;
}