1

我正在用java实现骑士之旅,目前我把所有东西都混成了一大堆代码。

我有一个名为 MainFrame 的类,其中包括解决骑士之旅的代码以及菜单的方法等。

我想创建一个名为 KT(用于骑士之旅)的新类,其中将包含算法的代码,但这样做有很多问题。

我不想在这里发布代码,因为我不希望我班上的人复制或其他东西,所以我将简要解释一下。

在 KT 类中,我已经声明了变量、数组等。我有诸如 printSolution、move、redo(回溯)等方法。

但是我不确定如何绑定按钮的代码(在 MainFrame 中声明)。例如,我在 print 方法中有一个循环,可以在 8x8 板上打印正确的解决方案。现在我被要求为按钮创建一个新方法,即使我在 MainFrame 类中有按钮。

我有一个 KT k = new KT(); 然后我正在启动 MainFrame。这是我做错的地方还是我太愚蠢而无法弄清楚的事情真的很简单?

tl;当我在一个班级中拥有所有东西时,dr 程序运行良好,但我想制作两个班级并使一切“看起来”不错

4

2 回答 2

2

actionPerformed您的MainFrame类的方法中,只需调用适当的方法即可从中获取解决方案KT(顺便说一下,我将重命名为KnightsTour...可读性计数)。

理想情况下,您希望将所有逻辑(模型)分解成合理的方法KnightsTour,并将所有显示和按钮处理代码(视图和控制器)分解为MainFrame. 如果这很困难,那么这是一个好兆头,您需要重新考虑如何将事物划分为方法(以及您对全局状态所做的事情......这是不受欢迎的)。

对不起,我不能更具体——因为你没有发布代码,所以我有点手忙脚乱。

于 2012-07-05T02:07:19.217 回答
2

首先,给你的 KnightTour 类起一个真实的名字。就像,你知道的,KnightTour。如果您编写此代码是为了获得现金,那么下一个必须阅读您的代码的人会想揍那个叫类似 KT 的类的人。

考虑创建此类,以便您可以从 GUI 控制器(如按钮和菜单加载小程序)中使用它。但是,它也可以从基于字符的应用程序中使用,您可以在提示符下键入命令并让您的新类评估这些命令。

我建议这样做的原因是因为它会迫使您创建 KnightTour 类,以便它纯粹是您的应用程序的“业务逻辑”。我的意思是你的 KnightTour 类不应该知道任何关于按钮、菜单、GUI、文本界面或类似的东西。您需要考虑您的 KnightTour 课程必须完成的任务。

我真的不知道 KnightTour 是做什么的。所以我只是抛出一些关于它可能需要支持什么样的功能的想法。我假设一切都发生在棋盘上?

  1. 获取给定棋盘位置 (x,y) 的状态(已占用、未占用)
  2. 将棋子(棋子枚举器)放在给定位置(x,y)
  3. 验证一块的放置(块枚举器,位置 x,y)
  4. 建议移动,返回带有片段枚举器和位置的 Suggestion 对象
  5. 重置板以重新开始。

现在,当您按下一个显示“在 5,5 上放置一块”的按钮时,您将在您的 GUI 控制器中处理该事件,然后调用“设置块”方法(上面的#2)来完成这项工作。如果您有一个基于字符的应用程序,当您键入“put knight at 5,5”时,您将解析该文本,然后调用上面的#2。关键是这两个用户界面都访问相同的 KnightTour 方法来完成相同的工作。

于 2012-07-05T02:27:11.750 回答