事件驱动的棋盘游戏和 GUI:如何连接?
Event driven board game and GUI: How to connect?
所以我一直在 Java 上制作棋盘游戏 Funny Bunny(儿童游戏)。我首先使其基于文本,但现在我一直在使用 Swing 为其构建 GUI。问题是,我以前从未制作过 GUI,而且 GUI 本身制作起来相当容易,但我发现很难将我的游戏和 GUI 结合起来。
我先解释一下游戏的基本思路。
游戏
- 有 2-4 名玩家,他们都有 4 个棋子。
有一副特殊的卡牌"run"游戏(4种:移动1、2或3步和改变棋盘的卡牌。
一轮由玩家展示一张牌组成
If it's a move card, the move a piece
If it's change the board card, the board changes and holes may open. (Some places on the board aren't safe, game pieces might drop in a hole)
所以,游戏背后的想法很简单。
麻烦的是,我不知道如何让它真正与 GUI 一起工作。我认为这是相当的,并开始热情地构建我的 GUI。我制作了游戏视图(我将添加图片)、主菜单、玩家数量菜单和所有这些东西只是为了意识到我不知道如何真正让它与事件驱动游戏一起工作。
Game view, work in progress, never mind the colors
我希望 GUI 版本按照这些思路工作
1.首先,一堆用于设置播放器和东西的菜单。没关系。
2. 在游戏视图中,玩家通过按 "Show card" 来展示一张牌
3. 根据卡的类型进入任一阶段:
3.1 移动棋子。这将通过单击一个游戏棋子(侧面的按钮或游戏板上的棋子)来实现 --> 这将开始移动一个棋子的过程 --> 最后需要更新棋盘
或者
3.2 换板,会更新GUI板。 我真的不知道该怎么做。
我应该使用线程或 Swing Worker 之类的东西还是我应该做什么?
你们想看一些示例代码吗?那可能会有所帮助。请告诉我,我会 post 一些(它需要对评论和内容进行一些翻译,这就是为什么我不想在这里随机 post 部分代码)
所有的帮助、评论、反馈...一切都会受到高度赞赏并且真的很有帮助。我是否已经提到我迷路和卡住了?我真的。
不久前,我在 java 给自己做了一个纸牌游戏。
不会给出具体的代码细节,因为这在这里是不可能的,但我能给你的最好建议是这个。
查找有关 swing 的教程。这将帮助您了解GUI制作的基础知识以及可用的基本组件。
同时搜索 Listeners 以使您的图形用户界面根据您的游戏逻辑工作。
仅这些东西就足以创建一些基本的(甚至是高级的)东西。
祝你项目顺利
您需要培养 Model-View-Controller 的概念。这个想法是将你的程序分成不同的责任层。
型号
模型负责维护程序的数据和状态信息。
该模型提供有关其状态更改的事件通知,感兴趣的各方可能需要知道
查看
负责在屏幕上表示模型的当前状态。它还与用户有直接联系,并负责收集传递给...
的用户输入
控制器
负责将它们绑定在一起。控制器从视图中获取输入并根据其规则对模型进行修改。
控制器甚至可以控制从模型流向视图的信息。
在MVC的一些实现中,视图和模型没有任何联系,只能通过控制器进行通信。这有好有坏。这有点糟糕,因为控制器需要加倍来自模型的通信并将它们传递给视图,充当代理,这可以复制代码。这很好,因为它可以保护视图和模型免受控制器根据其规则可能不允许的修改。我倾向于尝试并遵循这个模型,但 Swing 本身将控制器隐藏在视图中,因此它看起来更耦合。
这个概念也与code to interface and not implementation的想法有关。这意味着模型、视图和控制器只知道“合同”,而不知道细节。
这使您可以灵活地更改实现(例如,添加网络播放能力)而无需更改整个程序结构,因为组件仅通过定义的接口相互通信。
这里的总体意图是分离责任并允许每一层处理它自己的一组问题,而不会混淆整个代码。这也意味着您可以随着时间的推移更改某些层而不会对程序的其余部分产生不利影响,因为它们没有紧密耦合在一起[=13=]
现在您可能完全困惑了,您可以看看 this example,它演示了登录 MVC
所以我一直在 Java 上制作棋盘游戏 Funny Bunny(儿童游戏)。我首先使其基于文本,但现在我一直在使用 Swing 为其构建 GUI。问题是,我以前从未制作过 GUI,而且 GUI 本身制作起来相当容易,但我发现很难将我的游戏和 GUI 结合起来。
我先解释一下游戏的基本思路。
游戏
- 有 2-4 名玩家,他们都有 4 个棋子。
有一副特殊的卡牌"run"游戏(4种:移动1、2或3步和改变棋盘的卡牌。
一轮由玩家展示一张牌组成
If it's a move card, the move a piece If it's change the board card, the board changes and holes may open. (Some places on the board aren't safe, game pieces might drop in a hole)
所以,游戏背后的想法很简单。
麻烦的是,我不知道如何让它真正与 GUI 一起工作。我认为这是相当的,并开始热情地构建我的 GUI。我制作了游戏视图(我将添加图片)、主菜单、玩家数量菜单和所有这些东西只是为了意识到我不知道如何真正让它与事件驱动游戏一起工作。
Game view, work in progress, never mind the colors
我希望 GUI 版本按照这些思路工作 1.首先,一堆用于设置播放器和东西的菜单。没关系。 2. 在游戏视图中,玩家通过按 "Show card" 来展示一张牌 3. 根据卡的类型进入任一阶段: 3.1 移动棋子。这将通过单击一个游戏棋子(侧面的按钮或游戏板上的棋子)来实现 --> 这将开始移动一个棋子的过程 --> 最后需要更新棋盘 或者 3.2 换板,会更新GUI板。 我真的不知道该怎么做。
我应该使用线程或 Swing Worker 之类的东西还是我应该做什么? 你们想看一些示例代码吗?那可能会有所帮助。请告诉我,我会 post 一些(它需要对评论和内容进行一些翻译,这就是为什么我不想在这里随机 post 部分代码)
所有的帮助、评论、反馈...一切都会受到高度赞赏并且真的很有帮助。我是否已经提到我迷路和卡住了?我真的。
不久前,我在 java 给自己做了一个纸牌游戏。 不会给出具体的代码细节,因为这在这里是不可能的,但我能给你的最好建议是这个。
查找有关 swing 的教程。这将帮助您了解GUI制作的基础知识以及可用的基本组件。
同时搜索 Listeners 以使您的图形用户界面根据您的游戏逻辑工作。
仅这些东西就足以创建一些基本的(甚至是高级的)东西。
祝你项目顺利
您需要培养 Model-View-Controller 的概念。这个想法是将你的程序分成不同的责任层。
型号
模型负责维护程序的数据和状态信息。
该模型提供有关其状态更改的事件通知,感兴趣的各方可能需要知道
查看
负责在屏幕上表示模型的当前状态。它还与用户有直接联系,并负责收集传递给...
的用户输入控制器
负责将它们绑定在一起。控制器从视图中获取输入并根据其规则对模型进行修改。
控制器甚至可以控制从模型流向视图的信息。
在MVC的一些实现中,视图和模型没有任何联系,只能通过控制器进行通信。这有好有坏。这有点糟糕,因为控制器需要加倍来自模型的通信并将它们传递给视图,充当代理,这可以复制代码。这很好,因为它可以保护视图和模型免受控制器根据其规则可能不允许的修改。我倾向于尝试并遵循这个模型,但 Swing 本身将控制器隐藏在视图中,因此它看起来更耦合。
这个概念也与code to interface and not implementation的想法有关。这意味着模型、视图和控制器只知道“合同”,而不知道细节。
这使您可以灵活地更改实现(例如,添加网络播放能力)而无需更改整个程序结构,因为组件仅通过定义的接口相互通信。
这里的总体意图是分离责任并允许每一层处理它自己的一组问题,而不会混淆整个代码。这也意味着您可以随着时间的推移更改某些层而不会对程序的其余部分产生不利影响,因为它们没有紧密耦合在一起[=13=]
现在您可能完全困惑了,您可以看看 this example,它演示了登录 MVC