Java 事件驱动的棋盘游戏和GUI:如何连接?

Java 事件驱动的棋盘游戏和GUI:如何连接?,java,swing,user-interface,event-driven,Java,Swing,User Interface,Event Driven,所以我一直在用Java制作棋盘游戏《有趣的兔子》(儿童游戏)。我首先让它基于文本,但现在我一直在使用Swing为它构建GUI。问题是,我以前从未制作过GUI,而且GUI本身也很容易制作,我发现将游戏和GUI结合起来非常困难 我将首先解释游戏的基本思想 游戏 有2-4名球员,他们都有四个棋子 有一副特殊的牌可以“运行”游戏(4种类型:移动1步、2步或3步,以及用于更换棋盘的牌) 一回合由玩家出示一张牌组成 如果是一张移动卡,则移动一块 如果更换棋盘卡,棋盘会发生变化,可能会有洞打开。(棋盘上的某

所以我一直在用Java制作棋盘游戏《有趣的兔子》(儿童游戏)。我首先让它基于文本,但现在我一直在使用Swing为它构建GUI。问题是,我以前从未制作过GUI,而且GUI本身也很容易制作,我发现将游戏和GUI结合起来非常困难

我将首先解释游戏的基本思想

游戏

  • 有2-4名球员,他们都有四个棋子
  • 有一副特殊的牌可以“运行”游戏(4种类型:移动1步、2步或3步,以及用于更换棋盘的牌)

  • 一回合由玩家出示一张牌组成

    如果是一张移动卡,则移动一块 如果更换棋盘卡,棋盘会发生变化,可能会有洞打开。(棋盘上的某些地方不安全,游戏碎片可能会掉进洞里)

因此,游戏背后的想法相当简单

麻烦的是,我不知道如何真正让它与GUI一起工作。我认为这更合适,并开始热情地构建我的GUI。我制作了游戏视图(我将添加一张图片)、主菜单、玩家数量菜单以及所有这些东西,只是为了意识到我不知道如何真正让它与事件驱动的游戏一起工作

我希望GUI版本能够按照这些思路工作 1.首先,一堆设置玩家和其他东西的菜单。没关系。 2.在游戏视图中,玩家通过按下“显示卡”来显示一张卡 3.根据卡的类型,进入任一阶段: 3.1移动游戏棋子。这将通过单击游戏棋子(侧面的按钮或游戏板上的棋子)来实现-->这将开始移动棋子进程-->最后需要更新棋盘 或 3.2更换主板,这将更新GUI主板。我真的不知道该怎么做。

我应该使用线程、Swing Worker之类的工具,还是应该怎么做? 你们想看一些示例代码吗?这可能会有帮助。只要让我知道,我会发布一些(它需要一些注释和东西的翻译,这就是为什么我不想在这里随机发布部分代码)


所有的帮助、评论、反馈……一切都将不胜感激,而且非常有帮助。我已经说过我迷路了吗?我真的迷路了。

不久前,我用java制作了一款纸牌游戏。 我不会给出具体的代码细节,因为这在这里是不可能的,但我能给你的最好建议是

查找有关swing的教程。这将帮助您了解gui制作的基础知识以及可用的基本组件

还可以搜索监听器,以使gui基于游戏逻辑工作

这些东西本身就足以创造一些基本的(甚至是高级的)东西


祝你的项目好运

你会希望培养项目的概念。这个想法是将你的项目划分为不同的责任层

模型 模型负责维护程序的数据和状态信息

该模型提供有关其状态更改的事件通知,相关方可能需要知道这些更改

看法 负责在屏幕上表示模型的当前状态。它还与用户直接连接,并负责收集用户输入,并将其交给

控制器 负责将它们绑定在一起。控制器从视图中获取输入,并根据其规则对模型进行修改

控制器甚至可以控制从模型到视图的信息流

在MVC的一些实现中,视图和模型没有任何连接,只能通过控制器进行通信。这既是好的也是坏的。这有点不好,因为控制器需要将来自模型的通信加倍,并将它们传递给视图,作为代理,它可以复制代码。这和protec一样好根据控制器的规则,将视图和模型从控制器可能不允许的修改中删除。我倾向于尝试并遵循此模型,但Swing本身将控制器隐藏在视图中,因此它看起来更耦合

这一概念还涉及到的概念。这意味着模型、视图和控制器只知道“合同”,而不知道细节

这允许您灵活地更改实现(例如,添加网络播放功能),而无需更改整个程序结构,因为组件仅通过定义的接口相互通信

这里的总体意图是分离责任,允许每一层处理自己的一组问题,而不混淆代码。这也意味着您可以随着时间的推移更改某些层,而不会对程序的其余部分产生不利影响,因为它们不是紧密耦合在一起的


现在你可能已经完全困惑了,你可以看看哪个演示了登录MVC

你是移植基于文本的游戏还是从头开始重写整个游戏?这个概念既简单又复杂。保留所有游戏“数据”以及管理数据所需的逻辑,与UI分开。UI应监控模型的状态并相应地更新其视图。它还应告诉模型/逻辑用户做了什么(即想画一张卡,想移动一块)。然后,模型层和逻辑层应决定如何最好地实现这一点,并触发适当的状态更改,以便UI更新自己。程序员的观点正是我所想的。如果您在移植代码时遇到问题,则表明您具有紧密耦合的游戏和UI逻辑(这很糟糕)如果游戏代码写得好的话,你应该能够很容易地把游戏代码和任何用户界面插入其中