2016-12-28 42 views
0

我想創建一個掃雷遊戲。首先,這將在按鈕上工作。我想我會在二維數組上工作,並且會有像布爾型數組那樣顯示炸彈在哪裏,例如,如果booleanArray [0] [4]爲true,那麼就是炸彈。掃雷艇,我該如何在細胞上工作

現在,我該如何在我的按鈕中實現這一點?我可以在這些按鈕上設置名稱,然後如果我點擊某個按鈕,那麼我將從這個div中獲得名稱。例如,當我點擊第一個按鈕,我會得到「00」的名字,然後我會得到第一個字母「0」和第二個字母「0」,並解析它爲int。這將是我以前的booleanArray的索引,在這種情況下它將是booleanArray [0] [0]。

那麼,我能做到另一種更好的方式,而不是那個嗎?

這是我將要創建的按鈕方式:

for (int i = 0; i < 10; i++) { 
     for (int j = 0; j < 10; j++) { 
      JButton button = new JButton(""); 
      button.setPreferredSize(new Dimension(50, 50)); 
      button.setName(Integer.toString(i) + Integer.toString(j)); 
      } 
    } 

編輯
我將有一個二維數組,這將反映我的按鈕: enter image description here

,現在,怎麼能我點擊例如第一個按鈕後,檢查是否點擊炸彈?

+0

不知道你在問什麼,但在你的代碼中,JButton對象會在你的循環的下一次迭代中立即超出範圍。也許你想要一個2維JButton數組? –

+0

嗨,我編輯了我的帖子。請檢查你是否知道我在說什麼。 – cerbin

回答

2

只需按住按鍵的二維陣列,

JButton[][] myButtons = new JButton[10][10]; 

,你用它來吸引他們,他們都調用相同的方法與他們的價值

for (int x=0; x<10; x++){ 
    for (int y=0; y<10; y++){ 
    myButtons[x][y] = new JButton("0"); 
    //add to page, or do it elsewhere 
    myButtons[x][y].addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      selectionButtonPressed(x,y); 
     } 
    }); 
    } 
} 

然後YOUT方法selectionButtonPressed()通話會告訴你什麼按鈕已被按下,你可以採取行動,甚至做出修改按鈕與myButtons[x][y].whatever()

1

這是一種方式埠T優應該使用類似創建名的字符串:

button.setName(i + ":" j); 

這將使它更容易分析出兩個值,你可以只使用String.split(...)方法。

另一種選擇可能是創建與JButton作爲密鑰的HashTable,然後使用Point對象(表示行/列)作爲HashTable的值對象。然後,您只需使用HashMap的get(...)方法來檢索點擊按鈕的Point。

另一種選擇是在創建按鈕時擴展JButton並添加兩個參數(行,列)。然後您還添加getRow()getColumn()方法。

這兩種方法中的任何一種都會保持邏輯簡單,並且只需要創建一個由所有按鈕使用的ActionListener。