2016-12-28 41 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。