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