设计简单模拟器时的设计考虑

Design consideration when design a simple simulator

我正在尝试用 C# 创建一个简单的模拟器,它应该可以模拟一个非常简单的汽车引擎。模拟器可以打开或关闭,例如,它将有以下输入(将来可能会有更多)。

用例:

在此示例中,汽车引擎将具有以下输入参数:

这些输入参数将改变以下两个输出参数:

比如驾驶模式设置为经济模式,则可以输出的最大推力为,例如。 70%。 NOS 也会以某种方式交替输出。模拟器将有一个事件处理程序,推力和温度的计算值将被公布。

问题:

我要求提供一些有关如何设计最简单的模拟器的信息,以便稍后可以使用新的输入参数对其进行扩展。您会推荐任何好的设计模式或文章吗?欢迎提问或展示您的最佳解决方案:)

提前致谢

鉴于汽车引擎模拟器是一堆输入和输出参数,这取决于对其他参数的更改,我建议使用观察者模式,

例如 ThrustProduced 参数将是 DrivingMode 的观察者,当 DrivingMode 参数改变时,它必须通知它的观察者,包括 ThrustProduced,然后重新计算推力并将其限制为 70%,然后触发事件以通知推力已更改。

您应该实施几种模式,这将使您的生活更轻松。如果您熟悉 Unity 游戏引擎,请使用它的概念。如果你打算制作游戏,我建议你使用这个游戏引擎。

首先,使用游戏循环更新模式。

在模拟中你需要多个FixedUpdate事件来计算一个Update事件来渲染帧。 FixedUpdate 不应依赖于当前的 FPS。

然后你可以实现某种 Bus 就像在真正的汽车中使用 CAN-BUS 一样。可以用 Observer/ObservableSubscriber/Publisher 来完成。您可以在此处了解差异 Difference between Observer, Pub/Sub, and Data Binding,但我建议您使用 Subscriber/Publisher,因为它类似于消​​息队列。

要实现不同的模式(经济、赛车),您可能需要 策略 模式。

此外,组件 模式将有助于类比真实汽车中的设备和传感器。每个组件对象从总线队列中读取消息并将事件发送到总线。 ECU 或 EMS 等一些组件可以使用当前策略为喷油器发送命令。

State 模式将帮助您维护组件的不同状态。例如,发动机循环状态。

你的问题很笼统,但我建议你选择一些real-life概念,类比设计代码。

请参阅这本好书以了解有关上述模式的更多信息:http://gameprogrammingpatterns.com/contents.html