【问题标题】:Moving pieces in Chess java [closed]在国际象棋java中移动棋子[关闭]
【发布时间】:2013-09-15 23:34:01
【问题描述】:
for(y=0;y<length;y++){
    for(x=0;x<width;x++){

            grid[x][y]=new JButton(" ");
            grid[x][y].addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                ((JButton)e.getSource()).setBorder(border);;
                System.out.println("Where do you want to move this piece");
            }
        }); 
            grid[x][y].addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent r){
                    grid[x][y]=grid[x][y-1];
                    ((JButton)r.getSource()).setBorder(border);;
                    System.out.println("Derp");
                }
            });
            frame.add(grid[x][y]);
    }
}

我想单击一个棋子,然后当您单击另一个方块时,该棋子会向上移动一个。我知道这是错误的,我会展示合法的动作,但现在我需要让棋子移动。请帮忙!! 在弄清楚这一点之前,我完全被困住了。

【问题讨论】:

  • 所以gridJButton 的数组,而您只是在网格中移动按钮? - 这就是代码的样子。您应该考虑将“游戏状态”和“游戏视图”分成不同的类。
  • 是什么让你觉得代码有问题?
  • 另见examplevariation
  • 我只想将我点击的第一个 Jbutton 移动到我点击的第二个点的位置。 e=r 如果就这么简单
  • 或许可以致电repaint()。图形可能很挑剔,因此最好借鉴一个工作示例。

标签: java swing jbutton actionlistener chess


【解决方案1】:

首先,请确保所有语法都是正确的,因为我在这一行看到了双分号:

((JButton)e.getSource()).setBorder(border);;

此外,这一行应该在 ActioneListener 之外,因为您要设置按钮的边框,而不是在您单击时,而是在您设置操作时。

如果您不想对当前的操作方式进行太多更改,请尝试以下操作: 您应该创建一个 GameObject 类并让它扩展 JButton 还将按钮的边框设置为您喜欢的大小。现在创建一个 grid[x][y] 游戏对象。然后创建一个 Piece 类和一个 Space 类,两者都应该扩展 GameObject。片段类应该覆盖 JButtonpaint(Graphics g) 方法并渲染片段的图像。然后,当您单击一个棋子时,会升起一个标志并在主类中保留对该棋子的引用,然后当您单击一个空格时,程序将在两个游戏对象之间进行交换。 (注意:您必须使用 Space 类实例填充网格。)

将 JButton 直接作为“棋子”处理可能会很棘手,并且不是实现国际象棋游戏的好方法。

如果你真的想创建一个国际象棋游戏,我强烈建议你看看这个教程:

http://proghammer.wordpress.com/2010/08/08/chess00-introduction/

它适合初学者,循序渐进。我用这个 :D 创造了一个国际象棋游戏。

【讨论】:

  • 我只想将我点击的第一个 Jbutton 移动到我点击的第二个点的位置。 e=r 如果就这么简单
猜你喜欢
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 2022-06-17
  • 2014-03-02
  • 1970-01-01
相关资源
最近更新 更多