设计简单模拟器时的设计注意事项
本文关键字:注意事项 模拟器 简单 | 更新日期: 2023-09-27 18:29:47
我正在尝试用 C# 创建一个简单的模拟器,它应该模拟一个非常简单的汽车引擎。模拟器可以打开或关闭,例如,它将具有以下输入(将来可能会有更多输入(。
用例:
在此示例中,汽车发动机将具有以下输入参数:
- 产生的推力 (0-100%(
- 温度(-50C 至 300C(
- NOS(启用/禁用(
- 驾驶模式(经济/正常/速度(
- 开/关
这些输入参数将更改以下两个输出参数:
- 产生的推力 (0-150%(
- 温度(-50C 至 300C(
如果将驾驶模式设置为经济,则它可以输出的最大推力将为例如 70%。NOS 也会以某种方式交替输出。模拟器将有一个事件处理程序,将宣布推力和温度的计算值。
问题:
我要求就如何设计这个最简单的模拟器提供一些意见,以便稍后可以使用新的输入参数对其进行扩展。你会推荐任何好的设计模式或文章吗?随时提出问题或展示您的最佳解决方案:)
提前致谢
你应该实现几个模式,这将使你的生活更轻松。如果您熟悉 Unity 游戏引擎,请使用其概念。如果您打算构建游戏,我建议您使用此游戏引擎。
首先,使用游戏循环和更新模式。
在模拟中,您需要多个 FixedUpdate 事件才能在一个渲染帧的更新事件中进行计算。修复更新不应依赖于当前的 FPS。
然后,您可以实现某种总线,例如在真实汽车中使用CAN-BUS。它可以通过观察者/可观察或订阅者/发布者来完成。你可以在这里了解观察者、发布/订阅和数据绑定之间的区别,但我建议你使用订阅者/发布者,因为它就像消息队列一样。
要实现不同的模式(经济,赛车(,您可能需要策略模式。
此外,组件模式将有助于通过类比真实汽车中的设备和传感器来制作事物。每个组件对象从总线队列读取消息并将事件发送到总线。ECU或EMS等某些组件可以使用当前策略为喷油器发送命令。
状态模式将帮助您维护组件的不同状态。例如,发动机循环状态。
你的问题很宽泛,但我建议你选择一些现实生活中的概念,并通过类比进行代码设计。
请参考这本伟大的书,阅读更多关于提到的模式:http://gameprogrammingpatterns.com/contents.html
鉴于汽车发动机模拟器是一堆输入和输出参数,这取决于对其他参数的更改,我建议使用观察者模式,
例如ThrustProduced
参数将是DrivingMode
的观察者,当DrivingMode
参数更改时,它必须通知它的观察者,包括ThrustProduced
,然后重新计算推力并将其限制为70%,然后触发事件以通知推力已更改。