在国际象棋比赛中的Mouselistener

时间:2013-11-06 01:24:32

标签: java swing awt mouselistener chess

我正在创建一个国际象棋游戏,现在我已经用所有棋子填充了我的图形棋盘,现在我需要使用Mouselistner来移动棋子。在实现图形版本之前,我创建了一个2D控制台版本,它接受了“玩家移动”,所以我确实拥有所有这些方法,但我现在需要使用Mouselistener,我读了一下这些方法,但是,我是否需要实现每个班级都有mouselistener?

我有1个抽象的Piece类以及7个子类(包括Dummy piece),以及一个ChessBoard类,它填充所有部分并提供移动方法(从控制台版本...)所以我在哪里放置mouselistener?在Jcomponent扩展中,JFrame或ChessBoard类包含填充棋盘并移动的方法?

2 个答案:

答案 0 :(得分:0)

很抱歉这么简单的答案,但您需要做的就是将mouselistener添加到您的ChessBoard类中。从那里我假设您可以访问您已实例化的Piece子类对象并在其上调用方法(即mouseClicked,piece.pickUp())。如果代码的安排方式需要在许多类中实现鼠标侦听器,请考虑以下事项:

addMouseListener( new MouseAdapter() {
    @Override
    public void mouseClicked( MouseEvent e ) {
          // Do something
    }
} );

http://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseAdapter.html

另外,如果是我,我会转移将你的Pieces移动到Piece类的方法,最好是在更高级别,然后你不必重写相同的代码两次。然后在你的游戏中,每当调用mouseReleased时,调用一些方法,例如attemptToMove(BoardPoint p),它将检查你的作品的当前位置和新位置p是否在你作品的旅行方式之内。 BoardPoint可以是您为自己的电路板设置的x,y坐标,采用8 X 8样式,如2维整数数组。

答案 1 :(得分:0)

这在某种程度上取决于你如何实施你的作品。如果它们本身就是GUI对象,例如按钮或面板,那么将mouseListener放在它们上将允许Swing框架确定哪个被点击了。如果这些部分都扩展了Piece类,那么只要它需要执行的逻辑(例如移动一块)可以对所有部分进行相同的操作,就可以在其中放置一个处理程序。

另一方面,如果您在代码中在电路板上绘制图形图像,那么没有用于Swing检测被点击的GUI组件,那么在电路板上实现mouseListener更有意义。在这种情况下,你的代码必须弄清楚点击了哪个方块,以及它是否有一个方块;之后处理将与之前的情况非常相似。

相关问题