2013-04-06 65 views
0

我正在製作一個tic tac toe項目,我正在使用9個按鈕和圖像(Circle.jpg,Cross.jpg)。首先,我想澄清一件事給你們,所以我首先使用字母(「X」),(「O」)製作了這個遊戲,現在我正在使用這個遊戲的圖像,並且它也是電腦vs玩家遊戲 運行後,當我點擊按鈕時,它顯示了我在該按鈕上交叉,沒錯,並且計算機自動將圓圈放入另一個按鈕中!tic tac toe遊戲項目圖像圖標?

問題是,當我點擊Next按鈕時,它顯示出一個十字,這是正確的。但電腦不會把圓圈擋住我的行。

import java.awt.*; 
import java.awt.event.*; 
import java.util.Random; 
import javax.swing.*; 

public class TicTacToe implements ActionListener { 
/*Instance Variables*/ 
static int[][] winCombinations = new int[][] { 
     {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, //horizontal wins 
     {1, 4, 7}, {2, 5, 8}, {3, 6, 9}, //vertical wins 
     {1, 5, 9}, {3, 5, 7}    //diagonal wins 
    }; 
static JFrame window = new JFrame("Tic-Tac-Toe"); 
static JButton buttons[] = new JButton[10]; 
static int count = 0; 
static Icon letter; 
static boolean win = false; 
static Icon myImage = new ImageIcon("Cross.jpg"); // 
static Icon Image = new ImageIcon("Circle.jpg"); 

static String AA; 
public TicTacToe(){ 
/*Create Window*/ 
window.setPreferredSize(new Dimension(300,300)); 
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
window.setLayout(new GridLayout(3,3)); 

/*Add Buttons To The Window*/ 
for(int i = 1; i<=9; i++) 
{ 
    buttons[i] = new JButton(); 
    window.add(buttons[i]); 
    buttons[i].setPreferredSize(new Dimension(myImage.getIconWidth(), myImage.getIconHeight())); 
    buttons[i].addActionListener(this); 
} 

/*Make The Window Visible*/ 
window.setVisible(true); 
window.pack(); 
} 

public void actionPerformed(ActionEvent a) 
{ 
    /*Write the letter to the button and deactivate it*/ 
    for(int i = 1; i<= 9; i++){ 

     if(a.getSource() == buttons[i]){ 
      buttons[i].setIcon(myImage); 
      buttons[i].setEnabled(false); 
     } 
    } 

    count++;   
    AI(); 

} 

public void AI(){ 
    count++; 
    if(buttons[1].getText().equals(Image) && buttons[2].getText().equals(Image) && buttons[3].getText().equals("")){ 
     buttons[3].setIcon(Image); 
     buttons[3].setEnabled(false); 
    } else if(buttons[4].getText().equals(Image) && buttons[5].getText().equals(Image) && buttons[6].getText().equals("")){ 
     buttons[6].setIcon(Image); 
     buttons[6].setEnabled(false); 
    } else if(buttons[7].getText().equals(Image) && buttons[8].getText().equals(Image) && buttons[9].getText().equals("")){ 
     buttons[9].setIcon(Image); 
     buttons[9].setEnabled(false);     
    } 

    else if(buttons[2].getText().equals(Image) && buttons[3].getText().equals(Image) && buttons[1].getText().equals("")){ 
     buttons[1].setIcon(Image); 
     buttons[1].setEnabled(false);     
    } else if(buttons[5].getText().equals(Image) && buttons[6].getText().equals(Image) && buttons[4].getText().equals("")){ 
     buttons[4].setIcon(Image); 
     buttons[4].setEnabled(false);     
    } else if(buttons[8].getText().equals(Image) && buttons[9].getText().equals(Image) && buttons[7].getText().equals("")){ 
     buttons[7].setIcon(Image); 
     buttons[7].setEnabled(false);     
    } 

    else if(buttons[1].getText().equals(Image) && buttons[3].getText().equals(Image) && buttons[2].getText().equals("")){ 
     buttons[2].setIcon(Image); 
     buttons[2].setEnabled(false);     
    } else if(buttons[4].getText().equals(Image) && buttons[6].getText().equals(Image) && buttons[5].getText().equals("")){ 
     buttons[5].setIcon(Image); 
     buttons[5].setEnabled(false);     
    } else if(buttons[7].getText().equals(Image) && buttons[9].getText().equals(Image) && buttons[8].getText().equals("")){ 
     buttons[8].setIcon(Image); 
     buttons[8].setEnabled(false);     
    } 

    else if(buttons[1].getText().equals(Image) && buttons[4].getText().equals(Image) && buttons[7].getText().equals("")){ 
     buttons[7].setIcon(Image); 
     buttons[7].setEnabled(false);     
    } else if(buttons[2].getText().equals(Image) && buttons[5].getText().equals(Image) && buttons[8].getText().equals("")){ 
     buttons[4].setIcon(Image); 
     buttons[4].setEnabled(false);     
    } else if(buttons[3].getText().equals(Image) && buttons[6].getText().equals(Image) && buttons[9].getText().equals("")){ 
     buttons[9].setIcon(Image); 
     buttons[9].setEnabled(false);     
    } 

    else if(buttons[4].getText().equals(Image) && buttons[7].getText().equals(Image) && buttons[1].getText().equals("")){ 
     buttons[1].setIcon(Image); 
     buttons[1].setEnabled(false);     
    } else if(buttons[5].getText().equals(Image) && buttons[8].getText().equals(Image) && buttons[2].getText().equals("")){ 
     buttons[2].setIcon(Image); 
     buttons[2].setEnabled(false);     
    } else if(buttons[6].getText().equals(Image) && buttons[9].getText().equals(Image) && buttons[3].getText().equals("")){ 
     buttons[3].setIcon(Image); 
     buttons[3].setEnabled(false);     
    } 

    else if(buttons[1].getText().equals(Image) && buttons[7].getText().equals(Image) && buttons[4].getText().equals("")){ 
     buttons[4].setIcon(Image); 
     buttons[4].setEnabled(false);     
    } else if(buttons[2].getText().equals(Image) && buttons[8].getText().equals(Image) && buttons[5].getText().equals("")){ 
     buttons[5].setIcon(Image); 
     buttons[5].setEnabled(false);     
    } else if(buttons[3].getText().equals(Image) && buttons[9].getText().equals(Image) && buttons[6].getText().equals("")){ 
     buttons[6].setIcon(Image); 
     buttons[6].setEnabled(false);     
    } 

    else if(buttons[1].getText().equals(Image)&& buttons[5].getText().equals(Image)&& buttons[9].getText().equals("")){ 
     buttons[9].setIcon(Image); 
     buttons[9].setEnabled(false);     
    } else if(buttons[5].getText().equals(Image)&& buttons[9].getText().equals(Image)&& buttons[1].getText().equals("")){ 
     buttons[1].setIcon(Image); 
     buttons[1].setEnabled(false);     
    } else if(buttons[1].getText().equals(Image)&& buttons[9].getText().equals(Image)&& buttons[5].getText().equals("")){ 
     buttons[5].setIcon(Image); 
     buttons[5].setEnabled(false);     
    } 

    else if(buttons[3].getText().equals(Image)&& buttons[5].getText().equals(Image)&& buttons[7].getText().equals("")){ 
     buttons[7].setIcon(Image); 
     buttons[7].setEnabled(false);     
    } else if(buttons[7].getText().equals(Image)&& buttons[5].getText().equals(Image)&& buttons[3].getText().equals("")){ 
     buttons[3].setIcon(Image); 
     buttons[3].setEnabled(false);     
    } else if(buttons[7].getText().equals(Image)&& buttons[3].getText().equals(Image)&& buttons[5].getText().equals("")){ 
     buttons[5].setIcon(Image); 
     buttons[5].setEnabled(false);     
    } 


    else if(buttons[1].getText().equals(myImage) && buttons[2].getText().equals(myImage) && buttons[3].getText().equals("")){ 
     buttons[3].setIcon(Image); 
     buttons[3].setEnabled(false); 
    } else if(buttons[4].getText().equals(myImage) && buttons[5].getText().equals(myImage) && buttons[6].getText().equals("")){ 
     buttons[6].setIcon(Image); 
     buttons[6].setEnabled(false);     
    } else if(buttons[7].getText().equals(myImage) && buttons[8].getText().equals(myImage) && buttons[9].getText().equals("")){ 
     buttons[9].setIcon(Image); 
     buttons[9].setEnabled(false);     
    } 

    else if(buttons[2].getText().equals(myImage) && buttons[3].getText().equals(myImage) && buttons[1].getText().equals("")){ 
     buttons[1].setIcon(Image); 
     buttons[1].setEnabled(false);     
    } else if(buttons[5].getText().equals(myImage) && buttons[6].getText().equals(myImage) && buttons[4].getText().equals("")){ 
     buttons[4].setIcon(Image); 
     buttons[4].setEnabled(false);     
    } else if(buttons[8].getText().equals(myImage) && buttons[9].getText().equals(myImage) && buttons[7].getText().equals("")){ 
     buttons[7].setIcon(Image); 
     buttons[7].setEnabled(false);     
    } 

    else if(buttons[1].getText().equals(myImage) && buttons[3].getText().equals(myImage) && buttons[2].getText().equals("")){ 
     buttons[2].setIcon(Image); 
     buttons[2].setEnabled(false);     
    } else if(buttons[4].getText().equals(myImage) && buttons[6].getText().equals(myImage) && buttons[5].getText().equals("")){ 
     buttons[5].setIcon(Image); 
     buttons[5].setEnabled(false);     
    } else if(buttons[7].getText().equals(myImage) && buttons[9].getText().equals(myImage) && buttons[8].getText().equals("")){ 
     buttons[8].setIcon(Image); 
     buttons[8].setEnabled(false);     
    } 

    else if(buttons[1].getText().equals(myImage) && buttons[4].getText().equals(myImage) && buttons[7].getText().equals("")){ 
     buttons[7].setIcon(Image); 
     buttons[7].setEnabled(false);     
    } else if(buttons[2].getText().equals(myImage) && buttons[5].getText().equals(myImage) && buttons[8].getText().equals("")){ 
     buttons[8].setIcon(Image); 
     buttons[8].setEnabled(false);     
    } else if(buttons[3].getText().equals(myImage) && buttons[6].getText().equals(myImage) && buttons[9].getText().equals("")){ 
     buttons[9].setIcon(Image); 
     buttons[9].setEnabled(false);     
    } 

    else if(buttons[4].getText().equals(myImage) && buttons[7].getText().equals(myImage) && buttons[1].getText().equals("")){ 
     buttons[1].setIcon(Image); 
     buttons[1].setEnabled(false);     
    } else if(buttons[5].getText().equals(myImage) && buttons[8].getText().equals(myImage) && buttons[2].getText().equals("")){ 
     buttons[2].setIcon(Image); 
     buttons[2].setEnabled(false);     
    } else if(buttons[6].getText().equals(myImage) && buttons[9].getText().equals(myImage) && buttons[3].getText().equals("")){ 
     buttons[3].setIcon(Image); 
     buttons[3].setEnabled(false);     
    } 

    else if(buttons[1].getText().equals(myImage) && buttons[7].getText().equals(myImage) && buttons[4].getText().equals("")){ 
     buttons[4].setIcon(Image); 
     buttons[4].setEnabled(false);     
    } else if(buttons[2].getText().equals(myImage) && buttons[8].getText().equals(myImage) && buttons[5].getText().equals("")){ 
     buttons[5].setIcon(Image); 
     buttons[5].setEnabled(false);     
    } else if(buttons[3].getText().equals(myImage) && buttons[9].getText().equals(myImage) && buttons[6].getText().equals("")){ 
     buttons[6].setIcon(Image); 
     buttons[6].setEnabled(false);     
    } 

    else if(buttons[1].getText().equals(myImage) && buttons[5].getText().equals(myImage) && buttons[9].getText().equals("")){ 
     buttons[9].setIcon(Image); 
     buttons[9].setEnabled(false);     
    } else if(buttons[5].getText().equals(myImage) && buttons[9].getText().equals(myImage) && buttons[1].getText().equals("")){ 
     buttons[1].setIcon(Image); 
     buttons[1].setEnabled(false);     
    } else if(buttons[1].getText().equals(myImage) && buttons[9].getText().equals(myImage) && buttons[5].getText().equals("")){ 
     buttons[5].setIcon(Image); 
     buttons[5].setEnabled(false);     
    } 

    else if(buttons[3].getText().equals(myImage) && buttons[5].getText().equals(myImage) && buttons[7].getText().equals("")){ 
     buttons[7].setIcon(Image); 
     buttons[7].setEnabled(false);     
    } else if(buttons[7].getText().equals(myImage) && buttons[5].getText().equals(myImage) && buttons[3].getText().equals("")){ 
     buttons[3].setIcon(Image); 
     buttons[3].setEnabled(false);     
    } else if(buttons[7].getText().equals(myImage) && buttons[3].getText().equals(myImage) && buttons[5].getText().equals("")){ 
     buttons[5].setIcon(Image); 
     buttons[5].setEnabled(false);     
    } 

    else if(buttons[1].getText().equals(myImage) && buttons[5].getText().equals(Image) && buttons[9].getText().equals(myImage)) { 
     buttons[6].setIcon(Image); 
     buttons[6].setEnabled(false);    
    }  

    else if(buttons[3].getText().equals(myImage) && buttons[5].getText().equals(Image) && buttons[7].getText().equals(myImage)) { 
     buttons[4].setIcon(Image); 
     buttons[4].setEnabled(false);    
    } 

    else if(buttons[5].getText().equals("")){ 
     buttons[5].setIcon(Image); 
     buttons[5].setEnabled(false);     
    } 

    else if(buttons[1].getText().equals("")){ 
     buttons[1].setIcon(Image); 
     buttons[1].setEnabled(false);     
    } 
    else { 
     if(count >= 9) 
      checkWin(); 
     else 
      RandomMove(); 
    } 

    checkWin(); 

} 

public void RandomMove(){ 
    Random x = new Random(); 
    int y = 1 + x.nextInt(9); 
    if(buttons[y].getText().equals(Image) || buttons[y].getText().equals(myImage)){ 
     RandomMove(); 
    } else { 
     buttons[y].setIcon(Image); 
     buttons[y].setEnabled(false); 
    } 
} 

public void checkWin(){ 

    /*Determine who won*/ 
    for(int i=0; i<=7; i++){ 
     if(buttons[winCombinations[i][0]].getText().equals(buttons[winCombinations[i][5]].getText()) && 
      buttons[winCombinations[i][6]].getText().equals(buttons[winCombinations[i][7]].getText()) && 
      !buttons[winCombinations[i][0]].getText().equals("")) { 
      win = true; 
     } 
    } 

    if(count % 2 == 0) 
     letter = Image; 
    else 
     letter = myImage; 

    /*Show a dialog when game is over*/ 
    if(win == true){ 
     JOptionPane.showMessageDialog(null, letter + " wins!"); 
     System.exit(0); 
    } else if(count >= 9 && win == false){ 
     JOptionPane.showMessageDialog(null, "The game was tie!"); 
     System.exit(0); 
    } 
} 
public static void main(String[] args) 
{ 
    new TicTacToe(); 
} 

}

+0

問題與遊戲邏輯有關,而不是GUI。相應地更改問題的標題。 – 2013-04-06 02:51:01

+0

確切的問題是什麼?錯誤的編程邏輯?或者某種技術問題?請澄清您的確切問題和/或問題。 – 2013-04-06 02:53:05

+0

檢查*** [this](http://stackoverflow.com/questions/125557/what-algorithm-for-a-tic-tac-toe-game-can-i-use-to-determine-the-best移動爲***)發佈tic-tac-toe算法的信息。 – 2013-04-06 02:55:41

回答

1

這看起來我錯了

buttons[1].getText().equals(Image) 

您正在使用的圖像進行比較的文本,我懷疑能永遠是真實的。

這也許應該是

buttons[1].getIcon() == Image 

,如果您加載圖片一次只會工作,並在任何地方使用它,你 被比較對象引用。

+0

'winCombinations [i] [5]'看起來也不對,因爲5必須小於3。 – 2013-04-16 10:02:20