gpt4 book ai didi

java - 跟踪棋子

转载 作者:行者123 更新时间:2023-11-29 03:07:57 25 4
gpt4 key购买 nike

我正在构建国际象棋图形用户界面;我有一个组成棋盘的按钮网格,我将每个棋子的图像设置为按钮图标。它的工作方式是每个棋子都有自己的类,它扩展了 Piece 父类(super class)。这些类中的每一个都有一个返回相应图像的 getImage() 方法。然后我将该图像设置为按钮图标。

现在我正在实现国际象棋规则,我意识到我需要知道每个棋子的位置。我想出了两个解决这个问题的办法

  1. 跟踪实例变量中的坐标。将整个对象放在按钮上,以便轻松检索。
  2. 每次单击按钮时获取坐标。基本上,点击板上的一个按钮,我得到那个按钮的坐标,然后通过我必须编写的某种标识符方法传递那个按钮的图标,我得到那个按钮上的部分。然后我可以使用这些信息来使用我的逻辑方法,例如 getLegalMoves() 等。

我开始编写代码时考虑了选项 2,但很快就变得过于复杂。如果我选择选项 1,我认为可以编写更简洁的代码。

我的问题是我不知道如何将一个完整的对象放在按钮之上,这样不仅对象的图像会显示在按钮上,而且对象本身也可以很容易地被访问。这样我就可以简单地将对象传递到我的逻辑方法中。

这样的解决方案可行吗?我在棋盘的 JPanel 上使用带有 JButtons 的 gridlayout。我不知道您可能还需要什么,所以请询问更多详细信息。

最佳答案

在这种情况下,绝对必须将 GUI、View 与程序逻辑或Model 分开。零件的位置是模型的一部分,因此不应由 GUI 跟踪。 GUI 的唯一工作是显示模型的状态,并在用户尝试更改其状态时通过控件向模型报告。所以我建议您创建自己的模型,它可能是由多个类或更多类组成的复杂野兽。它将具有代表棋盘、ChessSquare、ChessPieces、Moves、棋子的合法移动、用户以及任何 AI 引擎的逻辑类。

一个好的经验法则是编写模型,使其与 GUI 库无关,这意味着它应该可以很好地与 Swing GUI、控制台程序、在线程序甚至 Android 程序一起工作。

关于java - 跟踪棋子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31106918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com