【问题标题】:Design consideration when design a simple simulator [closed]设计简单模拟器时的设计考虑[关闭]
【发布时间】:2016-04-14 06:39:42
【问题描述】:

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

用例:

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

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

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

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

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

问题:

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

提前致谢

【问题讨论】:

  • 您在 UI 中使用什么框架?窗体? WPF?团结?

标签: c# design-patterns simulator


【解决方案1】:

鉴于汽车引擎模拟器是一堆输入和输出参数,这些参数取决于对其他参数的更改,我建议使用观察者模式,

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

【讨论】:

    【解决方案2】:

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

    首先,使用Game LoopUpdate模式。

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-20
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2012-10-20
      相关资源
      最近更新 更多