当前位置: 首页 > 知识库问答 >
问题:

国际象棋中的滑鼠者

柯波峻
2023-03-14

我正在创建一个国际象棋游戏,现在我已经用所有棋子填充了我的图形棋盘,现在我需要使用鼠标滑动器来移动棋子。在实现图形版本之前,我创建了一个2D控制台版本,它采用了“玩家移动”,所以我有所有这些方法,但我现在需要使用Mouselistener,我阅读了这些方法,但是,我需要在每个类中实现Mouselistener吗?

我有1个抽象工件类和7个子类(包括虚拟工件),还有一个棋盘类,它填充所有工件,并提供移动方法(从控制台版本…)我该把鼠标器放在哪里?在Jcomponent扩展中,包含填充棋盘和移动方法的JFrame或ChessBoard类?

共有2个答案

鞠嘉誉
2023-03-14

这在一定程度上取决于你如何实现你的作品。如果它们本身是GUI对象,比如按钮或面板,那么在它们上面放置鼠标侦听器将允许Swing框架确定单击了哪一个。如果所有的片段都扩展了一个片段类,那么你可以在其中放置一个处理程序,只要它需要执行的逻辑(比如移动一个片段)对所有片段都是相同的。

另一方面,如果您在代码中在板上绘制图形图像,因此Swing没有GUI组件来检测被单击,那么在板上实现鼠标监听器更有意义。在这种情况下,您的代码必须弄清楚点击了哪个方块,以及上面是否有一个块;之后的处理将非常像以前的情况。

邢宏浚
2023-03-14

很抱歉给出这样一个简单的答案,但您需要做的只是将MouseStener添加到棋盘类中。在这里,我假设您可以访问已实例化的Piece子类对象,并对其调用方法(即mouseclick,pieck.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

此外,如果是我,我会将用于将片段移动到片段类的方法转移到片段类中,最好是在更高的级别,这样就不必重写相同的代码两次。然后在游戏中,每当调用MouseRelease时,调用一些方法,比如Attemptomove(BoardPoint p),它将检查你的棋子的当前位置和新位置p是否在棋子的移动范围内。BoardPoint可以是你用x,y坐标为自己的电路板设置的8 x 8样式的东西,比如二维整数数组。

 类似资料:
  • 所以我一直在思考一个问题。我目前正在用Java编写一个基于比特板的国际象棋引擎(这是一个解决所有问题的过程)。到目前为止,所有的棋子/国王/骑士的动作都按预期进行,而且没有bug。 我需要帮助理解的是滑动件移动生成。我已经为每个方块/棋子生成了一系列空棋盘动作。根据我目前的理解,我还需要开发一个数组,包含每个广场上的每个可能占用空间——然后根据各种方法查找该数组。 这种想法正确吗?这是不是一个从0

  • DreamChess 是一款开放源码、跨平台(可在 Windows、Mac OS X 及 Linux 上运行)的 3D 国际象棋游戏。该游戏包含自身的引擎 Dreamer,提供各种国际象棋棋盘,并具有背景音乐及声效等其他附属功能。

  • 我正在下国际象棋,除了一件事,我几乎得到了所有的东西:我需要使棋手不可能将棋子移动到棋盘上。我很难解决这个问题。 我现在用伪代码生成的有效移动是:类getMoveLocations(我定义了一个位置为国际象棋中的一个方块):如果这个位置在边界内,这个位置的棋子是敌人的棋子,并且模拟的移动不会导致棋盘被检查,然后将该位置添加到工件可以移动到的可能位置。 问题是我如何检查棋盘是否“在检查中”。在我的代

  • 我已经有一个Board对象,包含一个碎片列表。Piece是一个抽象类,有一个位置(x,y)和一个颜色(黑色或白色)。然后是King、Queen、Knight这三个类,实现了Piece类。 谢谢

  • 上面的代码显示了一个可以上下移动的部分的示例。这不是一个有效的棋步。所以,如果我要移动一个皇后,我该怎么做呢?我们只是假设我们已经有了一个矩阵(x,y)8×8的板。

  • 我对我的象棋游戏的最小极大算法的实现有问题。它的大部分似乎都起作用了,但它要么从来没有做出好的动作,要么对它们的评估(基于两个玩家的活动棋子的分数)出了问题。例如,如果我设置了check(例如,傻瓜的伴侣),ai会做一些随机的事情,而不是杀死国王。我真的找不出我做错了什么。 评估电路板的类StandardBoardEvaluator在经过一些测试后似乎可以工作,因此问题很可能出现在MiniMax实