Java 跟踪棋子

Java 跟踪棋子,java,swing,Java,Swing,我正在构建一个象棋gui;我有一个组成棋盘的按钮网格,我将每个棋子的图像设置为按钮图标。其工作方式是,每个棋子都有自己的类,该类扩展了棋子超类。每个类都有一个getImage()方法,该方法返回相应的图像。然后我将该图像设置为按钮图标 现在我正在实施国际象棋规则,我意识到我需要知道每一个棋子的位置。我想出了两个解决这个问题的办法 跟踪实例变量中的坐标。将整个对象放在按钮上,以便轻松检索 每次单击按钮时获取坐标。基本上,点击电路板上的一个按钮,我得到该按钮的坐标,我通过我必须编写的标识符方法传递该

我正在构建一个象棋gui;我有一个组成棋盘的按钮网格,我将每个棋子的图像设置为按钮图标。其工作方式是,每个棋子都有自己的类,该类扩展了棋子超类。每个类都有一个getImage()方法,该方法返回相应的图像。然后我将该图像设置为按钮图标

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

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

    我的问题是,我不知道如何将一个完整的对象放在按钮上,这样不仅可以在按钮上显示对象的图像,还可以轻松访问对象本身。通过这种方式,我可以简单地将对象传递到我的逻辑方法中


    这样的解决方案可能吗?我正在使用JPanel上的gridlayout和JButtons作为我的棋盘。我不知道你还需要什么,所以你可以询问更多的细节

    在这种情况下,必须将GUI、视图和程序逻辑或模型分开。片段的位置是模型的一部分,因此GUI不应跟踪。GUI的唯一任务是显示模型的状态,并在用户试图更改其状态时通过控件向模型报告。因此,我建议您创建您的模型,它可能是一个由多个类或更多类组成的复杂beast。它将具有逻辑类,表示棋盘、棋盘、棋子、移动、棋子的合法移动、用户以及任何AI引擎


    一个很好的经验法则是编写模型,使其不受GUI库的影响,这意味着它应该与Swing GUI、控制台程序、在线程序甚至Android程序配合使用。

    在这种情况下,必须将GUI、视图与程序逻辑或模型分开。片段的位置是模型的一部分,因此GUI不应跟踪。GUI的唯一任务是显示模型的状态,并在用户试图更改其状态时通过控件向模型报告。因此,我建议您创建您的模型,它可能是一个由多个类或更多类组成的复杂beast。它将具有逻辑类,表示棋盘、棋盘、棋子、移动、棋子的合法移动、用户以及任何AI引擎


    一个好的经验法则是编写模型,使其不受GUI库的影响,这意味着它应该与Swing GUI、控制台程序、在线程序甚至Android程序配合使用。

    您应该从模型开始。该模型确定可以更改的规则,并维护所有片段的状态。然后,UI根据您应该从模型开始的模型状态更新其状态。该模型确定可以更改的规则,并维护所有片段的状态。然后UI根据模型的状态更新它的状态,最后一句话是我认为我在理解MVC时所缺乏的。记住这一点,我能够从gui中分离出各个部分,这将使我的程序更加简单。谢谢你的帮助,最后一句话是我对MVC的理解中所欠缺的。记住这一点,我能够从gui中分离出各个部分,这将使我的程序更加简单。谢谢你的帮助