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