我想创建一个扫雷游戏。首先,这将适用于按钮。我想我会在二维数组上工作,并且会有一个布尔数组,它将显示炸弹的位置,例如,如果booleanArray [0] [4]为真,则有一个炸弹。
现在,我如何在我的按钮中实现这一点?我可以在这些按钮上设置名称,然后如果我单击某个按钮,那么我将从这个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));
}
}
现在,如何在第一个按钮点击后点击炸弹?
答案 0 :(得分: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);
}
});
}
}
然后调用方法selectionButtonPressed()
会告诉您按下了什么按钮,您可以采取行动,甚至可以使用myButtons[x][y].whatever()
更改按钮
答案 1 :(得分:1)
这是一种方法,但您应该使用以下内容创建名称的字符串:
button.setName(i + ":" j);
这样可以更轻松地解析这两个值,因为您可以使用String.split(...)
方法。
另一种选择可能是创建一个HashTable
,其中JButton
作为键,然后使用Point
对象(表示行/列)作为{{的值Object 1}}。然后,您只需使用HashMap的HashTable
方法检索单击按钮的Point。
另一种选择是扩展JButton并在创建按钮时添加两个参数(行,列)。然后,您还可以添加get(...)
和getRow()
方法。
这两种方法都可以保持逻辑简单,只需创建一个ActionListener即可供所有按钮使用。