首页 文章

在国际象棋比赛中的Mouselistener

提问于
浏览
0

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

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

2 回答

  • 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),它将检查你的作品是否是旅行的方式 . BoardPoint可以是您为自己的电路板设置的x,y坐标,采用8 X 8样式,如2维整数数组 .

  • 0

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

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

相关问题