我必须用Java编写一个用于大学任务的多人pacman游戏,到目前为止,我正在为我的设计提供一些反馈。
所以我想尝试一下MVC风格和this is what I've sketched out。
我从来没有使用MVC设计任何东西,所以我的知识实际上只来自务实的程序员和简短的讲座,所以我很可能会误解或误解它。
另外,我在设计简单游戏时看到的大部分教程都没有提到MVC,所以MVC不是一个很好用的模式吗?
到目前为止,我的想法是 Game State 类将成为数据存储的主要来源,并且将使用2D阵列来存储游戏的状态,其中鬼魂是,pacman等等。
Game 类将是主控制器类,它将包含主游戏循环并控制数据(游戏状态)和视图之间的所有交互(可能一个 GUI 表示 - 我刚刚添加了基于文本的文本)。
在游戏开始工作之后,我将不得不将其拆分为客户端/服务器。在我看来,通过使用这个模型,将大部分数据和处理保留在服务器上并让客户端与控制器交互并绘制自己的视图并不太难。我不知道这可能会如何影响网络游戏的性能,因此一旦单人游戏版本完成,我将不得不进一步研究。
根据我的设计到目前为止,任何提示或建议都会非常感激 - 同时请记住它最终必须是一个多人游戏。
干杯,
亚当
答案 0 :(得分:2)
恰恰相反:对于这类问题,MVC实际上是一件非常好的事情,Swing框架在支持它方面做得非常好。
您应该首先阅读MVC。正如概述一样,您将尝试分离游戏在内部(模型)的表示方式,从绘制方式(视图)以及该状态如何变化(控制器)。
首先想一想模拟当前游戏状态所需的一切。有一个实体定义了一些基本行为,并像你一样为PacMan和Ghost创建了子类,这可能是一个很好的开始,但你可能想把你的Map称为GameBoard之类(给出与库相同的名称)类通常是个坏主意:你不想把它与java.util.Map混淆。要结束模型部分,您可能希望将它们全部包装在一个“了解”游戏整个状态的类中。由于这是你的GameState类,你可能想重绘箭头。
由于确定视图可能相当容易,您可以去那里。你可以给你的GameState一个draw(Graphics)方法,并从你的视图中调用它(你稍后会决定)。这可能反过来委托你的每个实体,他们可能会将它委托给他们拥有的Sprite或Image对象。现在,您的视图,可能是JPanel等,可以在其paintComponent()方法中使用自己的Graphics对象调用draw()。
现在你仍然需要一个控制器才能让事情发生。这可能是某个对象,其中KeyListener被挂钩到视图中,还有一个InputStream和一个OutputStream来处理与其他玩家的通信(它可能也需要担心同步游戏状态)。它还需要一个计时器,以便它可以告诉单位定期更新。您确实需要决定谁决定移动是否合法:控制器可以做到,GameState可以做,或者它可以只给实体提供他们需要的信息并让他们自己做。
一旦你拥有了所有这些部分,你就可以将它们包装在一个知道所有事情的最后一堂课中,并将其全部设置完毕。还有更多我正在掩饰的事情以及你必须做出的更多决定,但它应该让你前进。
答案 1 :(得分:1)
我完全赞同詹姆斯,并且想补充一点,你可能还想确保你的游戏状态的这个2d阵列可以处理一些边缘情况,比如多个幽灵占据了一个瓦片,一个pacman和鬼魂相同的瓷砖(取决于你在代码中处理它的方式),pacman的食物点等等。
好的计划往往会制作最好的节目,我很高兴看到你开始制作图表。