我是一位有着丰富经验的新手程序员,希望对其进行扩展。这是我在校外尝试的第一个项目,因此我的资源相当波动,因为我根本不知道我需要知道什么。但是,我对使用Java的基本GUI有一些小的基础。
我想创建一个国际象棋游戏,然后实现一个AI。然而,目前我只是在构建游戏本身。现在,我想要一个简单的GUI框架,它看起来不漂亮或复杂。只需显示棋盘,棋子在哪里,点击一块,它会突出显示你可以去的地方,然后点击方块,瞧,移动完毕。
这是我在GUI界面设计中的主要问题。它是否与逻辑部分分开?换句话说,如果我创建一个Piece,我是否需要有一个.jpg或其他东西,或者我可以只有一个单独的类,如果在这个方块中有一个pawn,在这些坐标中显示一个pawn图片。构建GUI需要了解什么?我主要使用谷歌来环顾四周,但我们会非常感激,并且知道是否可以继续在棋盘上工作,同时以不同的速度继续使用GUI部分。
非常感谢,如果我提出的任何问题都很容易找到,我很抱歉。我有可能触及它,但没有认识到它对我想要做的事情的重要性。
再次感谢:)
我只是为感兴趣的人更新此内容。我有一个更好的形式,我将要做的事情,并在我的脑海里有这个结构,并在纸上翻译。现在,为了简单起见,一切都只是用Java。
无论如何,抱歉很长的帖子。没有人必须阅读这个。 :)
我会尝试使用MVC格式,虽然它可能会让我感到有些困惑。
模型 - 我将创建一块棋盘[8] [8]。 Piece将是一个抽象类,由坐标和我现在调用的抽象方法canMove(x,y)组成。我最初也有移动(x,y),但我意识到这些碎片不会进行移动。因此,我坚持使用canMove方法,让控制器查看Piece是否确实可以执行该操作。
控制器 - 在这里,我将创建电路板并设置所有部件。我认为这将是最大的课程,因为它几乎可以调节一切。
查看 - 这基本上就是GUI。
这就是我认为控制器/视图协调应该起作用的方式。
控制器中会有一个名为hand的变量。当我第一次点击一件时,它将检查它是否是黑色/白色,这是该片中的一个参数。如果它是正确的颜色,它将被分配到手。然后它会检查双数组中的每个方块。如果canMove()为true,则在视图中突出显示该方块。然后第二次单击将检查canMove()。如果是,请检查它是否被一块相同的颜色占据,然后移动到那里。如果是假,没什么。如果您单击手,则手变空。对我来说,问题将是视图如何与控制器交互。稍后会知道。
在每次动作结束时,检查每件作品的canMove()以查看国王是否在其中。如果是,请检查。对于将军,我想我将有一个完整的方法来标记国王周围的方格,看看他们是否都标记过,包括他所在的那个。
所以我有几件事我也意识到我并没有考虑到我必须弄清楚的事情。典当捕获和典当运动将非常具体。王车易位。对于canMove应用,如果有一些碎片,一定不能阻挡它。
构建视图会很痛苦,因为我的课程都没有教过我任何关于它的内容。我想,最后会到达它。 Idk我怎么会在没有视图的情况下进行测试,但也许不是最后一次。
答案 0 :(得分:4)
这是我在GUI界面设计中的主要问题。它是否与逻辑部分分开?
当然,是的。
国际象棋引擎和用户界面实际上是两个完全不同的程序,在不同的进程中运行是很常见的。
国际象棋引擎通常针对速度进行优化,通常用C或C ++编写(如果您愿意,可以使用Java)。 GUI通常用Java编写。引擎和GUI通常由具有不同技能的完全不同的程序员团队编写。
有通信的标准协议,例如Universal Chess Interface,也称为UCI。如果采用此标准,您可以编写自己的GUI并将其与现有引擎一起使用。然后,如果您以后编写自己的引擎来实现UCI协议,您只需更改GUI中的设置即可使用您的引擎。
正如在评论中所提到的,实施UCI标准可能对您的第一个项目有点多。但是我希望知道在现实世界中如何完成它可能会为你选择的任何设计提供一些灵感。
答案 1 :(得分:3)
这是一个模糊的“问题”,但这里有几个初步指示:
阅读Model-view-controller pattern(是的,业务逻辑将在模型中,GUI将成为视图。)
尝试使用GridLayout
。
在您的单元格中使用JLabel
或JButton
答案 2 :(得分:2)