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

时间:2016-01-09 17:06:11

标签: c# design-patterns simulator

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

用例:

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

  • 产生推力(0-100%)
  • 温度(-50℃至300℃)
  • NOS(启用/禁用)
  • 驾驶模式(经济/正常/速度)
  • 开/关

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

  • 产生推力(0-150%)
  • 温度(-50℃至300℃)

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

问题:

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

提前致谢

2 个答案:

答案 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