【问题标题】:Minesweeper, how can i work on cells扫雷,我如何在细胞上工作
【发布时间】:2016-12-30 20:52:54
【问题描述】:

我想创建一个扫雷游戏。首先,这将适用于按钮。我想我会处理二维数组,并且会有类似布尔数组来显示炸弹在哪里,例如,如果 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));
           }
     }

编辑
我将有一个二维数组,它将反映我的按钮:

现在,我如何检查我点击第一个按钮后是否击中了炸弹?

【问题讨论】:

  • 不确定您在问什么,但在您的代码中,JButton 对象将在循环的下一次迭代中立即超出范围。也许你想要一个二维 JButton 数组?
  • 嗨,我编辑了我的帖子。请检查您是否知道我在说什么。

标签: java swing


【解决方案1】:

只需按住二维按钮数组,

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()对按钮进行更改

【讨论】:

    【解决方案2】:

    这是一种方法,但您应该使用以下内容创建名称字符串:

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

    这将更容易解析出这两个值,因为您可以使用 String.split(...) 方法。

    另一种选择可能是以JButton 作为键创建HashTable,然后使用Point 对象(表示行/列)作为HashTable 的值对象。然后,您只需使用 HashMap 的 get(...) 方法来检索单击按钮的点。

    另一种选择是扩展 JButton 并在创建按钮时添加两个参数(行、列)。然后你还要添加getRow()getColumn() 方法。

    这两种方法都将保持逻辑简单,您只需要创建一个供所有按钮使用的 ActionListener。

    【讨论】:

      猜你喜欢
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多