我尝试实现一个小游戏项目,深入研究OO编程(winforms c ++/cli).我已经开始编码,但现在我想重新设计.游戏开始时应该包括游戏引擎,用户界面,高分和游乐场四个部分.下面是一个小的(不符合UML的)类图,以显示我的目的
这是正确的方法吗?在我看来,游戏引擎负责控制游戏序列(状态机?)并在所有其他类之间交换信息.
我感谢任何帮助!
编辑:
所以这是一个非常简单的游戏,没什么大不了的!这是我现在所做的一个链接:http: //www.file-upload.net/download-2595287/conways_project.exe.html (没有病毒:)但我猜你需要.NET框架才能让它运行起来)
不幸的是,你当前的设计很糟糕:)
我不会说我会建议实际上是最好的解决方案,因为在游戏设计中通常会有"没有最好的"解决方案,但我认为它会让你思考得恰到好处.
alt text http://yuml.me/1924128b
假设你有基础课Game
.这是一个抽象的类,它包含了你所有的游戏逻辑,并作为一种瑞士刀.
您应该创建两个其他类- UI
和State
(其中,显然,封装游戏UI操作和存储当前的游戏状态).让你的Game
班级UI
和State
实例.
现在,你的Game
班级应该有基本的方法来控制你的游戏.它们可能是简单的render(...)
和update(...)
方法,这部分实际上有点棘手.如果你的游戏是实时的,那么你必须每Y毫秒更新你的状态,所以你update(...)
应该循环调用.
如果您的游戏实际上并不是实时的,那么您的更新应该仅在用户做某事或您确实知道您需要更改某些内容时才会发生.您可以在此处实现消息队列,并且update(...)
调用将简单地刷新所有这些消息.
现在,render(...)
方法.创建一个类并调用它Backend
- 让这个类封装你所有的绘图可能性.这里有一个非常酷的东西 - 你可以让你Backend
成为一个抽象的超类,并创建一些具体的后端,这些后端派生自Backend
.这实际上会让您有机会Backends
通过简单的代码操作来切换.
之后,您应该将您的Backend
实例传递给您的render(...)
方法,该方法将执行适当的绘制,并且可以按以下方式编写逻辑:
foreach (const Object& object, game_state) {
object->render(backend); // Or something like that
}
Run Code Online (Sandbox Code Playgroud)
最后要提到的是,你的游戏状态.你可以有一个简单的结构来保存你所有的当前对象,得分等等.让每个对象访问该GameState
结构,一切都会好的.
实际上,有很多事情要考虑,如果你愿意,我可以写更多关于这个游戏设计方法并分享一些技巧:)