2012-05-18 78 views
4

所以這是一個大學任務,除了AI不知道如何「取勝」,其開始時的動作並不像我想要的那樣隨意因爲他們總是走在最前沿,並努力工作。這項任務只需要AI的兩條規則,因爲它可以「取勝」或「阻止勝利」。TicTacToe AI Java

此外,遊戲似乎並沒有結束,當董事會被填補。它讓我選擇我的舉動。

我希望有人可能會對我如何改善它或指出我錯在哪裏提出建議。

任何幫助將不勝感激。

這裏是發揮

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


    } 
} 
+1

想象一下,如果**在玩朋友或單獨玩遊戲時玩**遊戲,寫下你用來玩的算法,並進入代碼 –

+0

@LuiggiMendoza這就是我認爲我所做的。我無法發現哪裏出了問題。這是我目前遇到的麻煩。也許我已經花了太長的時間,但我看不到它。 – Anderscc

+0

您採取了哪些步驟來診斷非AI問題?可能值得休息一下,並在早上再試一次。 –

回答

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; 

    } 

} 

然後我添加了一個設置類,它可以在每次移動後設置並打印板子。

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的Computer類。

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

如果通過將第九塊贏了,你會得到雙方的「你贏了」和「這是平局!」消息,我不認爲這是預期的行爲。如果你在第九回閤中輸了,就一樣。另一方面,當沒有人贏的時候,沒有達到平局,這就是爲什麼比賽沒有結束的原因。這是很容易解決:

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

TTTC是我TicTacToeComputer類的對象,
按鈕[]陣列限定在TicTacToeComputer,
TicTacToePlayer是我的具有靜態int變量 '計數' 其他類,具有三個布爾
TicTacToePlayer靜態變量名WINX,酒味和雙贏,

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