2010-06-12 64 views
1

我尝试实现一个小游戏项目,以便更深入地了解面向对象编程(winforms C++/cli)。 我已经开始编码了,但现在我想重新设计。 一开始游戏应该由游戏引擎,用户界面,高分和操场四部分组成。下面有一个小(非UML-符合)类diagramm想象我的目的面向对象编程 - 需要你的帮助

Class diagram

请问这是正确的方式?在我眼中,游戏引擎负责控制游戏序列(状态机?)并在所有其他类之间交换信息。

我感谢任何帮助!

编辑:

所以这是一个非常简单的游戏,没什么大不了的!什么我现在做这里'山链接: http://www.file-upload.net/download-2595287/conways_project.exe.html (无病毒:)但我猜你需要.NET framwork得到它的工作)

+0

你应该先设计再编程的游戏。另外,这个游戏是在一个控制台,在2D,3D ..? – Alerty 2010-06-12 18:19:46

+0

这听起来更像是寻找现有的示例游戏。游戏开发通常由性能要求驱动,而不是设计的美感。 – Dummy00001 2010-06-12 18:26:40

+2

嘿,你是如何制作这个令人敬畏的图表的? – 2010-06-12 18:34:28

回答

6

不幸的是,当前的设计很烂:)

我不会说什么,我会建议实际上是最佳的解决方案,因为在游戏设计中,通常存在“没有最好”解决方案,但我认为这会让你觉得适当。

较大的UML here.

alt text http://yuml.me/1924128b

比方说,你有你的基本类Game。这是抽象类,它包装了所有的游戏逻辑,并且是一种瑞士刀。

您应该创建另外两个类 - UIState(显然,它封装了游戏的UI操作并存储当前的游戏状态)。让你的Game类拥有UIState实例。

现在,你的Game类应该有基本的方法来控制你的游戏。他们可能是简单的​​和update(...)方法,这部分实际上有点棘手。如果你的游戏是实时的,你将不得不每隔Y毫秒更新你的状态,所以你的update(...)应该被循环调用。

如果您的游戏实际上不是实时的,那么您的更新应该只在用户做某件事情时才会发生,或者实际上知道您需要更改某些内容。你可以在这里实现一个消息队列,并且update(...)调用将简单地刷新所有这些消息。

现在,​​方法。创建一些课程并称之为Backend - 让这个课程囊括你所有的绘图可能性。 这里有一件非常酷的事情 - 你可以让你的Backend成为一个抽象超类,并创建一些具体后端,它来自Backend。这实际上会让你有机会用简单的代码操作来切换你的Backends

之后,你应该将Backend实例传递给你的​​方法,它会做相应的图纸,它的逻辑可以写成下面的方式:

foreach (const Object& object, game_state) { 
    object->render(backend); // Or something like that 
} 

过去的事情说了,你的游戏状态。你可以有一个简单的结构来保存你当前的所有对象,分数​​等等。让每个对象访问那个结构,一切都会好的。

其实,有很多事情要考虑,如果你想,我可以写更多关于这个游戏的设计方法和大家分享一些技巧:)

+0

我会补充说,取决于OP在做什么(控制台游戏,3D游戏等),管理窗口(初始化窗口,错误,关闭窗口)可能很重要。另外,如果这是实时的,并且是二维或三维(DirectX,OpenGL等),重要的是拥有恒定的FPS。 – Alerty 2010-06-13 00:14:59

1

你的“游戏引擎”可能被认为更多的是“数学图书馆。'您可能希望在'游戏'和其他服务器类之间插入另一个对象,该对象将'游戏'的要求委托给服务器类并称为'游戏引擎'。

也可能将“高分”和“游乐场”组合成一个代表“游戏状态”的类并将其直接移植到“游戏”。 '游乐场'可以是一个服务器类,它封装了任何代码来做实际呈现所述背景的地方,这通常表示一个'渲染类'。

恕我直言