避免拼图系统的单身人士

举例来说,我有一个三个开关的题,需要在一个房间里的一些configuration(比如全部开启),在另一个房间打开一个门,负载屏幕分离,所以我不能直接连接到开关门。 我的第一个想法是创建一个单独的存储每个“解决scheme元素”,在这种情况下是开关的状态,但可能是一个正确的转动旋钮等。 那么就像一扇锁着的门一样,一个给定的“谜门”将检查所需的解决scheme元素,以决定它自己的状态,但是我对所有常见原因使用单身人士犹豫不决。

我有什么替代办法可以给我相同或类似的控制权?

Solutions Collecting From Web of "避免拼图系统的单身人士"

我不认为你应该与静态类成员(你没有提到语言,但我承担某种types的OOP),因为这只是在一个不同的地方隐藏“单身”。

切换东西,让你的游戏拥有一堆(地图,设置,列表,数组,等等)这些跨室内全球难题。 这样做,你的房间可以向游戏询问它使用某种标识符感兴趣的难题。

所以不是EXE-> singletonpuzzles-> Game-> Map->线性设置,而是最终得到一个更广泛的游戏层EXE-> Game-> [bunchofpuzzles + Map] – > Rooms

Pro:你可以有不同参数的同一个谜题类的多个实例Con:创建每个谜题的一些额外的写作,以及通过标识符来查找它们的方法

你会注意到,这个“一堆拼图”很可能是全球范围内的一个单身人士,而不是埋在游戏内部,但正如你所指出的那样,为什么这不是一个理想的devise呢?

我认为在这种情况下你应该保持简单。 这三个开关系统是一个解决scheme的挑战,这个Puzzle有两个状态,目前正确解决,目前尚未解决(或解决,然后由于某种原因恢复到未解决[定时器?])。 所以你有一个Boolean值,你需要把它存储在你的游戏的某个地方,所以门可以得到它,并相应的行为。

一个通用的解决scheme是使门成为谜题的观察者。 所以门会听拼图,知道什么时候打开或closures。 这可能是有问题的,但是因为这个门在拼图阶段根本不存在。 这意味着拼图分辨率的状态需要存储在某个地方,并以某种方式传回门户。

这就是为什么我会建议一个“延迟的事件”系统,你存储一个Hash又名关联数组,并通过该散列发送一个“消息”,例如:

 //In the Puzzle class, { String threeSwitchPuzzle = "The puzzle with three switches"; } // After completion delayedEvent(threeSwitchPuzzle, success); // Which translates to Hash[threeSwitchPuzzle] = true; // Construct the Door with the appropriate puzzle String as a member // Then when the `Door` is created if (getDelayedEvent(door.puzzle)) // behave accordingly 

我知道这是类似于明显的解决scheme,但如果你devise的方式是清晰和可维护的,它应该为你工作,并为您节省过度的麻烦。 你只需要存储somwhere的状态,稍后从那个地方获取。