Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自我项目:使用GUI创建国际象棋游戏_Java_User Interface_Chess - Fatal编程技术网

Java 自我项目:使用GUI创建国际象棋游戏

Java 自我项目:使用GUI创建国际象棋游戏,java,user-interface,chess,Java,User Interface,Chess,我是一个新的程序员,经验有限,希望在此基础上进行扩展。这是我的第一个项目,我将尝试校外,所以我的资源相当波动,因为我只是不知道它是什么,我需要知道。不过,我有一些关于使用java的基本GUI的小基础。p> 我想创建一个国际象棋游戏,然后实现一个AI。然而目前,我只是在构建游戏本身。现在,我想要一个简单的GUI框架,它不必看起来漂亮或复杂。只需显示棋盘,棋子在哪里,点击一个棋子,它会突出显示你可以去的地方,点击方块,瞧,移动完成 这是我在GUI界面设计中的主要问题。它是独立于逻辑部分完成的吗?换句

我是一个新的程序员,经验有限,希望在此基础上进行扩展。这是我的第一个项目,我将尝试校外,所以我的资源相当波动,因为我只是不知道它是什么,我需要知道。不过,我有一些关于使用java的基本GUI的小基础。p> 我想创建一个国际象棋游戏,然后实现一个AI。然而目前,我只是在构建游戏本身。现在,我想要一个简单的GUI框架,它不必看起来漂亮或复杂。只需显示棋盘,棋子在哪里,点击一个棋子,它会突出显示你可以去的地方,点击方块,瞧,移动完成

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

谢谢,如果我问的任何问题都是现成的信息,我很抱歉。有可能我曾经接触过它,但没有意识到它对我想做的事情的重要性

再次感谢:)


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

不管怎样,很抱歉发了这么长的邮件。没有人需要读这篇文章。:)

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

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

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

视图-这基本上是GUI

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

  • 控制器中将有一个名为hand的变量。当我第一次点击一个工件时,它会检查它是否为黑/白,这是工件本身的一个参数。如果它是正确的颜色,它会被分配到手上。然后它将检查双数组中的每个方块。如果canMove()为true,则在视图中高亮显示该正方形。然后,第二次单击将选中canMove()。如果为真,检查它是否被相同颜色的一块占据,如果没有,则移动到那里。如果为假,则为零。若你们点击手,手就会变空。对我来说,问题在于视图如何与控制器交互。我稍后会考虑的

  • 在每次移动结束时,检查每个棋子的canMove()以查看国王是否在其中。如果是,请检查。对于将死,我想我会有一个完整的方法来标记国王周围的方块,看看它们是否都被标记,包括他身上的那个

  • 所以我有几件事我也意识到我没有考虑,我必须弄清楚。典当捕获和典当移动将非常具体。城堡。若要应用canMove,在某些碎片的情况下,不得有任何障碍物


    建筑景观将是一件痛苦的事情,因为我的课程没有教过我任何关于它的东西。我想这件事会一直持续下去。Idk我将如何在没有视图的情况下进行测试,虽然这样可能不会持续很久。

    总之,是的。业务逻辑和表示应该分开。仔细阅读。祝你好运

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

    这是一个模糊的“问题”,但这里有几个初步的建议:

    • 阅读(是的,业务逻辑将在模型中,GUI将是视图。)

    • 尝试使用
      GridLayout

    • 在单元格中使用
      JLabel
      s或
      JButton
      s

      • 它们可以很容易地显示图像
      • 您可以将其背景设置为黑色或白色,然后
      • 你可以很容易地听到他们的点击
    这是我在GUI界面设计中的主要问题。它是独立于逻辑部分完成的吗

    当然,是的

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

    <> >象棋引擎通常是为了速度而优化的,通常用C或C++编写(尽管你愿意的话可以使用java)。GUI通常是用Java编写的。引擎和GUI通常由具有不同技能的完全不同的程序员团队编写

    有标准的通信协议,例如UCI。如果采用此标准,您可以编写自己的GUI,并将其用于现有引擎。然后,如果您以后编写自己的引擎来实现UCI协议,您只需更改GUI中的设置即可使用您的引擎


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

    看看Oracle的Swing教程。很抱歉,如果我不支持,您是完全正确的,但由于这是他的第一个项目,我只会给他一些基本建议,并让他接受