设计简单模拟器时的设计注意事项

本文关键字:注意事项 模拟器 简单 | 更新日期: 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%,然后触发事件以通知推力已更改。