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

C# 设计简单模拟器时的设计考虑,c#,design-patterns,simulator,C#,Design Patterns,Simulator,我正在尝试用C#创建一个简单的模拟器,它应该模拟一个非常简单的汽车发动机。模拟器可以打开或关闭,例如,它将具有以下输入(将来可能会有更多) 用例: 在此示例中,汽车发动机将具有以下输入参数: 产生的推力(0-100%) 温度(-50摄氏度至300摄氏度) 数量(启用/禁用) 驾驶模式(经济/正常/速度) 开/关 这些输入参数将改变以下两个输出参数: 产生的推力(0-150%) 温度(-50摄氏度至300摄氏度) 例如,如果驾驶模式设置为经济型,则其可输出的最大推力为70%。NOS也会以某

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

用例: 在此示例中,汽车发动机将具有以下输入参数:

  • 产生的推力(0-100%)
  • 温度(-50摄氏度至300摄氏度)
  • 数量(启用/禁用)
  • 驾驶模式(经济/正常/速度)
  • 开/关
这些输入参数将改变以下两个输出参数:

  • 产生的推力(0-150%)
  • 温度(-50摄氏度至300摄氏度)
例如,如果驾驶模式设置为经济型,则其可输出的最大推力为70%。NOS也会以某种方式交替输出。如果将公布推力和温度的计算值,模拟器将有一个事件处理程序

问题: 我要求提供一些关于如何设计这个模拟器的信息,以便以后可以使用新的输入参数对其进行扩展。你会推荐什么好的设计模式或文章吗?请随意提问或展示您的最佳解决方案:)


提前感谢

鉴于汽车发动机模拟器是一组输入和输出参数,这取决于对其他参数的更改,我建议使用Observer模式


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

你应该实施几种模式,让你的生活更轻松。如果您熟悉Unity游戏引擎,请使用其概念。我建议你使用这个游戏引擎,如果你的目标是建立游戏

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

在模拟中,需要在渲染帧的一个更新事件中计算多个FixeUpdate事件。FixedUpdate不应依赖于当前FPS

然后,您可以实现某种类型的总线,就像在实际的汽车中使用can-Bus一样。它可以通过观察者/可观察者订阅者/发布者完成。您可以在这里了解差异,但我建议您使用订阅者/发布者,因为它类似于消息队列

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

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

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

您的问题非常广泛,但我建议您选择一些现实生活中的概念,并通过类比进行代码设计

请参阅这本好书,了解更多关于上述模式的信息:

您在UI中使用的框架是什么?Winforms?WPF?团结?