java - 简单的 Java 游戏中的 MVC?

标签 java model-view-controller

嘿,我正在用 Java 实现一个简单突破克隆,并尝试使其符合 MVC 模式。我承认,我有 Web 背景,只在 Php 框架 Symfony 中使用过 MVC,从未在桌面应用程序中使用过。所以我的问题是决定哪个实体负责哪些任务。

我将我的项目分为这些类:

  • Breakout extends JFrame(主类)启动 MainViewController 并将其 View 添加到内容 Pane 。
  • MainViewController extends TimerTask 启动 MainView 并处理其鼠标和键盘事件。还运行游戏循环(计算游戏对象的位置和状态,即 BallPaddleBrick),是在这个地方?
  • MainView extends JPanel 只是在屏幕上绘制 BallPaddleBrick,这里没有任何逻辑。但是,它也会启动这些对象。恐怕这是不正确的,对吧?

最后是游戏元素:

  • Ball extends Ellipse2DPaddle extends Rectangle2DBrick extends Rectangle2D 提供了在屏幕上移动它们的方法,而且碰撞检测也是在这里完成的。再次,我怀疑这是正确的位置,将其移至 Controller 吗?

什么是模型?我想,正是这些游戏元素,因为它们代表了游戏期间唯一更改的数据。但这些都是 Controller 元素,因为它们也提供碰撞检测逻辑。它们最好的一点是,它们是在 view 类中启动的。我确信我的设计决策出了问题。

最佳答案

开发游戏的概念有点不同,但仍然是 MVC。

您的模型是游戏的实体,例如球、桨和砖 block 。

游戏由基本的三个步骤组成。

1° 读取输入(ViewController 会计算该输入)

2° Process Pieces AI(例如行为并根据 Controller 的新值进行移动)

3°在屏幕上绘制(您在屏幕上绘制所有实体)

在第一步中,如果用户输入向左或向右,您应该使用这些值更新桨实体。

碰撞应该在第二步中测试,对于你的例子,球应该测试它是否与任何砖 block 或桨相交来击退,球不需要用户 Action 来移动,所以它应该不断地移动某个方向直到相交。

第三步只是在屏幕上绘制所有元素。

游戏的第一个对象应该在 View init 的 setup() 方法中创建,其他对象(例如桨射击或从 splinter 的砖 block 中掉落的特殊奖励)应该在第二步中创建对于桨的情况, Controller 应该告诉桨用户按下按钮进行射击,在这个过程中,您创建射击实体并将其添加到实体游戏循环中,与砖 block 相同,但是当它注意它被摧毁了。

关于java - 简单的 Java 游戏中的 MVC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4587005/

相关文章:

Java 8 编译器错误 - 如何获取更多信息?

java - Sqlite 列到字符串数组

grails - 在 Grails 中添加新的域模型

model-view-controller - 如何让选择模型与代理模型一起使用?

python - 组织 GUI 应用程序

java - 计算数组中的重复值

java - 顺序搜索 Java

java - ArrayList 不会在控制台中打印

java - MVC 模式和 JTable

mongodb - Scala 的 MongoDriver + http4s : How to check if createCollection() throws an exception?