跟踪国际象棋棋子

时间:2015-06-29 02:28:42

标签: java swing

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

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

  1. 跟踪实例变量中的坐标。将整个对象放在按钮上,以便轻松检索。
  2. 每次单击按钮时获取坐标。基本上,单击板上的一个按钮,我得到该按钮的坐标,然后通过传递该按钮的图标通过我必须编写的一些标识符方法来获取该按钮上的那个。然后,我可以使用此信息,然后使用我的逻辑方法,如getLegalMoves()等。
  3. 我开始编写带有选项2的代码,但它的速度非常复杂。如果我选择选项1,我认为可以编写更清晰的代码。

    我的问题是我不知道如何将完整的对象放在按钮上,这样不仅可以在按钮上显示对象的图像,而且还可以轻松访问对象本身。这样我就可以简单地将对象传递给我的逻辑方法。

    这样的解决方案是否可行?我在JPanel上使用带有JButton的gridlayout作为我的棋盘。我不知道你还需要什么,所以只要求进一步的细节。

1 个答案:

答案 0 :(得分:4)

在这种情况下,您可以从程序逻辑或模型中分离出GUI, View ,这绝对是必须。部件的位置是模型的一部分,因此不应由GUI跟踪。 GUI的唯一作用是显示模型的状态,并在用户尝试更改其状态时通过Control向模型报告。所以我建议你创建你的模型,它可能是由几个或更多类组成的复杂野兽。它将具有代表董事会的逻辑类,ChessSquare,ChessPieces,Moves,一件作品的合法动作,用户以及任何AI引擎。

一个好的经验法则是编写模型,使其与GUI库无关,这意味着它应该适用于Swing GUI,控制台程序,在线程序或甚至是Android程序。