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

标签 c# design-patterns simulator

<分区>

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

用例:

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

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

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

  • 产生的推力 (0-150%)
  • 温度(-50C 到 300C)

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

问题:

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

提前致谢

最佳答案

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

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

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

然后您可以实现某种总线,就像在真车中使用 CAN-BUS 一样。它可以通过 Observer/ObservableSubscriber/Publisher 来完成。您可以在这里了解差异 Difference between Observer, Pub/Sub, and Data Binding但我建议您使用订阅者/发布者,因为它就像消息队列。

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

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

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

你的问题很宽泛,但我建议你选择一些现实生活中的概念,类比进行代码设计。

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

关于c# - 设计简单模拟器时的设计考虑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34696387/

相关文章:

c# - 使用区分文化的比较从字符串中获取子字符串

c# - 让所有线程休眠

c# - 关于工厂设计架构的问题

java - 使用命令模式时构造命令对象的首选模式

c# - Button.Visible = true;在功能中激活时无法将按钮设置为可见

c# - 什么是 Asp.Net Core TagHelper 等同于带脚本的 Html.ActionLink

security - 在应用程序中存储主机和端口数据是否会使服务器容易受到攻击?

java - 有没有办法在桌面应用程序中转换 Android 应用程序?

ios - flutter 医生 : Xcode installation is incomplete

iphone - 当窗口缩放至 100% 时,iPad 模拟器多点触控光标不显示