2012-08-02 45 views
3

我是一位经验有限的新程序员,希望能够扩展它。这是我在校外尝试的第一个项目,所以我的资源很波动,因为我根本不知道我需要知道什么。但是,对于使用Java的基本GUI,我有一些小的基础。自我项目:使用GUI创建国际象棋游戏

我想创建一个象棋游戏,稍后实现一个AI。但是,现在我只是在构建游戏本身。现在,我想要一个简单的GUI框架,它不必看起来漂亮或复杂。只需显示棋盘,棋子在哪里,点击棋子,它会突出显示你可以走到哪里,然后点击广场,瞧,移动完成。

这是我在GUI界面设计中的主要问题。它是否分开逻辑部分完成?换句话说,如果我创建了一个Piece,我是否需要一个.jpg或其他东西,或者我可以只有一个单独的类,如果在这个正方形中有一个棋子,在这些坐标中显示一个棋子图片。我需要知道什么来构建GUI?我主要使用谷歌浏览,但一开始就会被赞赏,同时知道继续在棋盘上工作,同时以不同的速度进行GUI部分的工作是可以的。

非常感谢,如果我提出的任何问题都是随时可以找到的信息,我很抱歉。我可能已经触及了它,但没有意识到它对我想做的事情的重要性。再次

谢谢:)


我只是有兴趣更新此。我有一个更好的形式,我将要做的事情,并在我的脑海中有这种结构,并在纸上翻译。现在,为简单起见,所有的东西都只是在Java中。

无论如何,抱歉,很长的职位。没有人需要阅读。 :)

我会尝试使用MVC格式,尽管它仍然可能会让我稍微困惑。

模型 - 我将创建一块板[8] [8]。 Piece将是一个抽象类,由我现在调用的坐标和抽象方法canMove(x,y)组成。我原本也有动作(x,y),但我意识到这些作品不会做动作。因此,我坚持使用canMove方法,让控制器看到Piece是否确实可以做到这一点。

控制器 - 在这里我将创建电路板并设置所有部分。我认为这将是最大的一个阶级,因为它几乎可以控制一切。

查看 - 这基本上是GUI。

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

  1. 控制器中会有一个变量叫手。当我第一次点击一个作品时,它会检查它是否是黑/白,这是作品本身的一个参数。如果它是正确的颜色,它将被分配到手。那么它会检查双数组中的每个方块。如果canMove()为true,则在视图中突出显示该方块。然后第二次点击将检查canMove()。如果属实,请检查它是否被一块相同颜色占据,如果不是,则移动到那里。如果是假的,什么都不是如果你点击手,手就变空了。对我而言,问题将是视图如何与控制器交互。稍后会介绍。

  2. 在每一个动作结束时,检查每件作品的canMove()以查看国王是否在其中。如果是这样,请检查。对于将军,我想我会有一个标记国王周围广场的整体方法,看看他们是否都有标记,包括他所在的那个。

所以我有几件事我也意识到我没有解释我必须弄清楚。典当捕捉和典当运动将非常具体。王车易位。 CanMove申请时,一定要有一些碎片的阻碍。

建筑视图将是一种痛苦,因为我的班级中没有人教过我任何关于它的事情。我想,最后会得到它。 Idk我会如何测试而不是观看,尽管可能不会持续。

+0

看看Oracle的Swing教程。 – 2012-08-02 22:38:57

回答

2

总而言之,是的。业务逻辑和表示应该是分开的。请阅读MVC。祝你好运。

编辑:读MVP也是一个好主意。但要注意的主要问题是应用程序逻辑应与显示器分离。这听起来像是一个新手编程的雄心勃勃的项目 - 希望这对你来说是一个很好的学习体验。

+0

谢谢:)我希望能够学到很多东西,并在我从这一课中学到更多东西后,想出一个更有意义的项目。我刚刚打开这些链接,并会很快阅读它们。感谢您的快速响应。 :) – Soulzityr 2012-08-02 22:59:42

3

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

  • 上阅读了Model-view-controller pattern(是的,业务逻辑将在模型和GUI会的看法)。

  • 尝试使用GridLayout

  • 使用JLabel S或JButton在你的细胞中

    • ,他们可以很容易地显示图像
    • 你可以设置自己的背景为黑色或白色,并且
    • 您可以轻松地听他们点击。
+0

谢谢你的建议。对不起,是的,我知道它很模糊,因为我仍在计划一切,只编写一些随机的东西来感受我想要做的事情。我在这里问这是因为在规划时我意识到我不知道我是如何计划完成GUI的。但我现在会阅读所有这些东西。非常感谢:) – Soulzityr 2012-08-02 22:58:37

4

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

当然,是的。

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

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

有通信的标准协议,例如Universal Chess Interface,也被称为UCI。如果你采用这个标准,你可以编写你自己的图形用户界面,并与现有的引擎一起使用然后,如果您稍后编写自己的引擎来实现UCI协议,则只需更改GUI中的设置即可使用您的引擎。

正如在实施UCI标准的评论中提到的,对于您的第一个项目来说可能会有点多。不过,我希望知道如何在现实世界中做到这一点,可以为您选择的任何设计提供一些灵感。

+0

对不起,如果我不高兴,你是完全正确的,但因为这是他的第一个项目,我只是给他一些基本的建议,让他按自己的意愿创建自己的游戏。我认为实施UCI协议并使用特定语言来完成这项任务并不是真正令人愉快的第一个项目。 – Dalmas 2012-08-02 22:48:53

+0

这确实说明了一个重要的观点,即业务逻辑和观点应该是分开的,以至于它们甚至不需要处于相同的过程中,也不需要相同的语言。有一个upvote。 – tronbabylove 2012-08-02 22:53:36

+0

@tronbabylove:谢谢。 :)还要感谢Dalmas提供了有洞察力的评论 - 我已经更新了我的答案,但我同意这个答案可能只会在OP完成他的项目V1并开始使用v2或v3之后才会有用(如果他曾经获得那么远)。 – 2012-08-02 23:03:10