我正在尝试用 C# 创建一个简单的模拟器,它应该可以模拟一个非常简单的汽车引擎。模拟器可以打开或关闭,例如,它将有以下输入(将来可能会有更多)。
用例:
在此示例中,汽车引擎将具有以下输入参数:
- 产生的推力 (0-100%)
- 温度(-50C 到 300C)
- NOS(启用/禁用)
- 驾驶模式(经济/正常/高速)
- 开/关
这些输入参数将改变以下两个输出参数:
- 产生的推力 (0-150%)
- 温度(-50C 到 300C)
如果驾驶模式设置为经济模式,则它可以输出的最大推力将是例如。 70%。 NOS 也会以某种方式交替输出。模拟器将有一个事件处理程序,推力和温度的计算值将被公布。
问题:
我要求提供一些有关如何设计最简单的模拟器的意见,以便稍后可以使用新的输入参数对其进行扩展。您会推荐任何好的设计模式或文章吗?随时提出问题或展示您的最佳解决方案:)
提前致谢
您应该实现几种模式,这将使您的生活更轻松。如果您熟悉 Unity 游戏引擎,请使用它的概念。如果你打算制作游戏,我建议你使用这个游戏引擎。
首先,使用游戏循环和更新模式。
在模拟中,您需要多个 FixedUpdate 事件在一个 Update 事件中进行计算以渲染帧。 FixedUpdate 不应依赖于当前的 FPS。
然后您可以实现某种总线,就像在真车中使用 CAN-BUS 一样。它可以通过 Observer/Observable 或 Subscriber/Publisher 来完成。您可以在这里了解差异 Difference between Observer, Pub/Sub, and Data Binding但我建议您使用订阅者/发布者,因为它就像消息队列。
要实现不同的模式(经济、赛车),您可能需要策略模式。
此外,组件模式将有助于通过类比真实汽车中的设备和传感器来制造事物。每个组件对象从总线队列中读取消息并将事件发送到总线。 ECU 或 EMS 等一些组件可以使用当前策略为喷油器发送命令。
State 模式将帮助您维护组件的不同状态。例如,发动机循环状态。
你的问题很宽泛,但我建议你选择一些现实生活中的概念,类比进行代码设计。
请参阅这本好书以了解有关上述模式的更多信息:http://gameprogrammingpatterns.com/contents.html