2013-05-05 48 views
1

對不起,我的英語不好,不是母語。我正在GUI上開發一個JavaSimonSays遊戲。我新編碼。我設法讓應用程序在控制檯上工作,但是它使圖形工作變得非常混亂。程序將生成的序列(secuenciaSimon)的LinkedLists與用戶通過按鈕(secuenciaUsuarioGUI)輸入的序列進行比較,但問題在於通過單擊任何按鈕來調用比較方法,以便生成的序列由simon大於由用戶介紹的那個。在Java Swing中等待多個按鈕輸入

黃色按鈕代碼

private void bAmarilloMousePressed(java.awt.event.MouseEvent evt) { 
    secuenciaUsuarioGUI.add(3); //Adds the selection to the LinkedList yellow=3 
    System.out.println("Secuencua Usuario GUI:" + secuenciaUsuarioGUI.toString()); 
    comparaSecuencia(); 
    generaSecuencia(); //Adds another value to the LinkedList 
} 

比較碼

public boolean comparaSecuencia(){ 
    for (int i = 0; i < secuenciaSimon.size(); i++) {  

      //Here the pause should be 

      if(secuenciaSimon.get(i) != secuenciaUsuarioGUI.get(i)){ 

       System.out.println("Not equal"); 
       return false; 
      } 

    } 
    System.out.println("Equal"); 
    puntuacion += 100; //Score 
    secuenciaUsuarioGUI.clear(); //Clears the LinkedList From the user 
    return true; 


} 

TL; DR 需要運行更多的代碼,而無需凍結程序之前等待GUI上的按鈕的 「N」 的投入。

感謝

回答

2

使用int count變量,將其設置爲0,並與每個按鈕按下加一。只有做你的行動當計數是足夠的,即,當它== 3

例如

// this is a class field 
private int count = 0; 

// in the code where you create your GUI 
button.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent evt){ 
    count++; // increment count 
    // do something with the button pressed, add information to a list 
    secuenciaUsuarioGUI.add(/* ?? something ?? */); 
    if (count == 3) { 
     // check the sequence 
     comparaSecuencia(); // ?? maybe this 
     count = 0; // reset 
    } 
    } 
}); 

的一個關鍵概念是,你必須使你的代碼事件驅動。你並沒有創建一個線性控制檯程序,原來在for循環中的代碼已經不再處於for循環中,而是當事件發生時增加計數器或改變對象的狀態,然後對狀態變化作出反應。

注意:如果您正在監聽用戶按下JButton,請不要使用MouseListener,而應使用ActionListener。

+0

聽起來不錯,但我希望能夠在比較三個按鈕之前進行比較。例如,如果序列是紅色>藍色>藍色,並且我輸入藍色>藍色,程序是否會等到最後一個按鈕,或者由於按下的第一個按鈕與序列不同,因此將其視爲假? – Franco 2013-05-05 20:17:18

+0

@Fravo:那麼你必須將這個邏輯編碼到你的程序中。但關鍵是你必須讓你的代碼**事件驅動**。您並未創建線性控制檯程序,因此以前在for循環中的代碼不再位於for循環中,而是在發生事件時增加計數器或更改對象的狀態,然後對狀態變化作出反應。 – 2013-05-05 20:19:04

+0

謝謝你,我設法通過實現你的代碼示例並使用userSecuence.size添加一個額外的比較器來解決它。祝你有美好的一天。 – Franco 2013-05-05 20:32:27