2012-05-29 68 views
0

不確定爲什麼此代碼不按預期工作,並希望你能幫我弄明白。我正在從一系列使用jbutton的教程開始開發tictactoe遊戲。我有什麼是我的主要類中的一個方法,每次點擊一個按鈕時都會「檢查forwin」。使用print語句,我發現每次單擊按鈕時都會運行方法,但getText()。equals(「_」)條件無法正常運行。在java中TicTacToe遊戲的問題?使用getText()。equals()與jButtons

此代碼是我的tictactoe.java的一部分,並且所有工作都正常。此事件被複制9次,每個按鈕。

public void button1ActionPerformed(ActionEvent e) { 
    if(button1.getText().equals("")){ 
     if(Main.playerTurn==true){ 
      button1.setText("X"); 
      Main.checkforwin(); 
      Main.playerTurn = false; 
     }else{ 
      button1.setText("O"); 
      Main.checkforwin(); 
      Main.playerTurn = true; 
     } 
    } 
} 

此代碼是我的main.java的一部分,其中包含checkforwin方法。對於玩家1和計算機(玩家2)來說,對於每個可能的tictactoe勝利,重複多次代碼檢查。

public class Main { 

public static boolean playerTurn = true; 
public static boolean playerWon = false;  
public static boolean computerWon = false; 

public static tictactoe board = new tictactoe(); 

public static void checkforwin(){ 
System.out.println("testing1"); 
    //horizontal row 1 
    if(board.button1.getText().equals("X")){ 
     System.out.println("testing2"); 
     if(board.button2.getText().equals("X")){ 
      if(board.button3.getText().equals("X")){ 
       playerWon = true; 
       computerWon = false; 
       System.out.println("Player 1 won"); 
      } 
     } 
    } 

}

的方法,將輸出testing1每一個按鈕被點擊時,然而它絕不會的條件內進行打印。

任何幫助或建議將不勝感激謝謝!

+1

與診斷'的System.out.println(board.button1.getText())'。 –

+0

如何打印按鈕文本或調試代碼? – Andreas

+0

感謝您的快速響應,我把它放在我的checkforwin方法的頂部,但它沒有打印任何內容,但是當我用System.out.println(「一些隨機文本」)替換它時,它將打印。 –

回答

1

我的猜測是它不拾取按鈕上的文字變化 - 按鈕上的文字變化(button1.setText("X");)等之後 - 你需要再次添加到面板,所以panel.add(button1);或不管它們存儲在

1

我正在快速瀏覽你的代碼,但並不完全確定,但「可能」你應該在條件IF語句中嘗試使用AND運算符?例如:

if(board.button1.getText().equals("X") && board.button2.getText().equals("X") && board.button3.getText().equals("X")){ 
      playerWon = true; 
      computerWon = false; 
      System.out.println("Player 1 won"); 
     } 

你可以使用這些類型的條件語句說無論是播放器/電腦贏了,提供水平或垂直按鈕等於X或O

有可能是雖然一個更有效的方法儘管這樣做,但這是我想到的第一個想法,所以你可以嘗試一下!

我希望它有幫助!

+0

無論如何,我這樣做,因爲它使我的代碼少得多的眼睛!謝謝 –