0

我必须用 Java 编写一个多人吃豆人游戏来完成大学作业,到目前为止,我正在为我的设计提供一些反馈。

所以我正在尝试采用 MVC 风格,这就是我所勾勒出来的

我从来没有使用 MVC 设计过任何东西,所以我的知识实际上只是来自务实的程序员和简短的讲座,所以我很可能会误解或误解它。

此外,我看到的大多数设计简单游戏的教程根本没有提到 MVC,所以这是不是 MVC 不是一个好用的模式的情况?

到目前为止,我的想法是Game State类将成为数据存储的主要来源,并将使用 2d 数组来存储游戏状态、幽灵在哪里、吃豆人在哪里等。

Game类将是主控制器类,它将包含主游戏循环并控制数据(游戏状态)和视图之间的所有交互(可能是GUI表示 - 我只是添加了基于文本的示例)。

在我让游戏正常运行后,我将不得不将其拆分为客户端/服务器。在我看来,通过使用这个模型,将大部分数据和处理保留在服务器上并让客户端与控制器交互并绘制自己的视图不会太难。我(还)不知道这会如何影响网络上的游戏性能,所以一旦单人版本完成,我将不得不进一步研究。

任何基于我迄今为止的设计的提示或建议,将不胜感激 - 还要记住它最终必须是一个多人游戏。

干杯,

亚当

4

2 回答 2

2

相反:MVC 对于这类问题实际上是一个非常好的东西,而 Swing 框架在支持它方面做得非常好。

您可能应该首先阅读MVC。作为概述,您将尝试将游戏的内部表示方式(模型)、游戏的绘制方式(视图)以及状态如何改变(控制器)区分开来。

首先考虑建模当前游戏状态所需的一切。拥有一个定义一些基本行为的实体并像你一样为 PacMan 和 Ghost 子类化它可能是一个很好的开始方式,但你可能希望将你的 Map 称为 GameBoard 或类似的东西(赋予与库相同的名称classes 通常是一个坏主意:您不想将它与 java.util.Map 混淆)。要结束模型部分,您可能希望将它们全部包含在一个“了解”游戏整个状态的类中。由于这是您的 GameState 类,您可能想要重新绘制箭头。

由于确定视图可能相当容易,因此您可以去那里。您可以为您的 GameState 提供一个 draw(Graphics) 方法,并从您的任何视图中调用它(稍后您将决定)。这可能反过来委托你的每个实体,谁又可能将它委托给他们拥有的 Sprite 或 Image 对象。现在,您的视图(可能是 JPanel 等)可以使用其自己的 Graphics 对象从其 paintComponent() 方法中调用 draw()。

现在你仍然需要一个控制器来真正让事情发生。这很可能是一些对象,其中一个 KeyListener 连接到视图中,还有一个 InputStream 和一个 OutputStream 来处理与其他玩家的通信(它可能还需要担心同步游戏状态)。它还需要有一个计时器,以便它可以告诉单元定期更新。您确实需要决定谁来决定这些动作是否合法:控制器可以这样做,GameState 可以,或者它可以只为实体提供他们需要的信息并让他们自己做。

一旦你拥有了所有这些部分,你就可以将它们包装在一个了解所有内容并完成所有设置等的最终课程中。还有很多我要掩饰的内容以及您必须做出的更多决定,但它应该让您继续前进。

于 2009-01-15T16:06:01.773 回答
1

我完全同意 James 的观点,并且想补充一点,您可能还想确保您的游戏状态的这个 2d 数组可以处理一些边缘情况,例如多个幽灵占据一个瓷砖,一个 pacman 和一个幽灵在同一个瓷砖(取决于您在代码中如何处理它),吃豆人的食物点等。

好的计划往往是最好的程序,我很高兴看到你从图表开始。

于 2009-01-15T16:09:55.743 回答