扫雷,我如何处理细胞

时间:2016-12-28 01:12:45

标签: java swing

我想创建一个扫雷游戏。首先,这将适用于按钮。我想我会在二维数组上工作,并且会有一个布尔数组,它将显示炸弹的位置,例如,如果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));
           }
     }

EDIT
我将有一个二维数组,它将反映我的按钮: enter image description here

现在,如何在第一个按钮点击后点击炸弹?

2 个答案:

答案 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即可供所有按钮使用。