2
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]);
    }
}

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

4

1 回答 1

2

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

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

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

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

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

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

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

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

于 2013-09-15T23:57:25.997 回答