3

我是一名经验有限的新程序员,希望在此基础上进行扩展。这是我将在校外尝试的第一个项目,所以我的资源波动很大,因为我根本不知道我需要知道什么。但是,我对使用 Java 的基本 GUI 有一些小的基础。

我想创建一个国际象棋游戏,然后实现一个人工智能。然而,目前我只是在构建游戏本身。现在,我想要一个简单的 GUI 框架,它不必看起来漂亮或复杂。只需显示棋盘,棋子在哪里,单击棋子,它将突出显示您可以去的地方,然后单击正方形,瞧,移动完成。

这是我在 GUI 界面设计中的主要问题。它是否与逻辑部分分开?换句话说,如果我创建一个 Piece,我是否需要有一个 .jpg 或其他东西,或者我是否可以有一个单独的类,如果这个正方形中有一个棋子,则在这些坐标中显示一个棋子图片。构建 GUI 我需要知道什么?我主要使用谷歌环顾四周,但如果有一个起点,我将不胜感激,同时知道是否可以继续在棋盘上工作,同时以不同的速度处理 GUI 部分。

提前谢谢,如果我提出的任何问题很容易找到信息,我很抱歉。我可能已经触及它,但没有认识到它对我想做的事情的重要性。

再次感谢 :)


我会为任何有兴趣的人更新这个。我对我将要做的事情有了更好的形式,并且在我的脑海中有这个结构并在纸上翻译。现在,为了简单起见,一切都将使用 Java。

无论如何,很抱歉发了这么长的帖子。没有人必须阅读此内容。:)

我将尝试使用 MVC 格式,尽管它仍然可能让我有些困惑。

模型-我将创建一个拼板[8][8]。Piece 将是一个抽象类,由坐标和我现在调用的抽象方法 canMove(x,y) 组成。我最初也有 move(x,y) 但我意识到这些碎片不会移动。因此,我坚持使用 canMove 方法,让控制器查看 Piece 是否确实可以执行该操作。

控制器-在这里我将创建板并设置所有部分。我认为这将是最大的课程,因为它将几乎规范一切。

查看 - 这基本上是 GUI。

这就是我认为控制器/视图协调应该如何工作的方式。

  1. 控制器中会有一个变量叫做hand。当我第一次点击一块时,它会检查它是否是黑色/白色,这是一块本身的参数。如果它是正确的颜色,它被分配到手。然后它将检查双精度数组中的每个正方形。如果 canMove() 为真,则在视图中突出显示该方块。然后第二次单击将检查 canMove()。如果为真,检查它是否被相同颜色的一块占据,如果不是,则移动到那里。如果是假的,什么都没有。如果你点击手,手就会变成空的。对我来说,问题在于视图如何与控制器交互。以后会想办法的。

  2. 在每一步结束时,检查每一个棋子的 canMove() 看是否有国王在里面。如果是这样,请检查。对于将死,我想我会有一个完整的方法来标记国王周围的方块,看看它们是否都被标记了,包括他所在的那个。

所以我有几件事我也意识到我没有考虑到我必须弄清楚的事情。典当捕获和典当移动将非常具体。铸造。应用 canMove 时,必须没有任何障碍物,以防出现某些碎片。

构建视图将是一种痛苦,因为我的课程都没有教给我任何关于它的东西。我想,我会坚持到最后。Idk 我将如何在没有视图的情况下进行测试,但可能不会持久。

4

3 回答 3

4

这是我在 GUI 界面设计中的主要问题。它是否与逻辑部分分开?

绝对没错。

国际象棋引擎和用户界面实际上是两个完全不同的程序,在不同的进程中运行是很常见的。

国际象棋引擎通常针对速度进行了优化,并且通常用 C 或 C++ 编写(但如果您愿意,也可以使用 Java)。GUI 通常是用 Java 编写的。引擎和 GUI 通常由具有不同技能的完全不同的程序员团队编写。

有用于通信的标准协议,例如通用国际象棋接口,也称为 UCI。如果您采用此标准,您可以编写自己的 GUI 并将其与现有引擎一起使用。然后,如果您稍后编写自己的引擎来实现 UCI 协议,您只需更改 GUI 中的设置以使用您的引擎。

正如评论中提到的那样,实施 UCI 标准对于您的第一个项目来说可能有点多。但是,我希望了解它在现实世界中是如何完成的,可以为您选择的任何设计提供一些灵感。

于 2012-08-02T22:39:12.470 回答
3

这是一个模糊的“问题”,但这里有几个初始指针:

  • 阅读模型-视图-控制器模式(是的,业务逻辑将在模型中,而 GUI 将是视图。)

  • 尝试使用GridLayout.

  • 在单元格中使用JLabels 或JButtons

    • 他们可以轻松地显示图像
    • 您可以将它们的背景设置为黑色或白色,并且
    • 您可以轻松地收听他们的点击。
于 2012-08-02T22:39:03.870 回答
2

一句话,是的。业务逻辑和表示应该是分开的。阅读MVC。祝你好运。

编辑:阅读MVP可能也是一个好主意。不过要带走的要点是您的应用程序逻辑应该与显示分离。对于刚接触编程的人来说,这听起来像是一个雄心勃勃的项目——希望这对你来说是一次很棒的学习经历。

于 2012-08-02T22:39:03.527 回答