如果根据挑战结果,排名变化的逻辑不同,还可能有更复杂的需求,比如下面这种排名:
A
B
C
D
E
F
E挑战B,同时F挑战B,F先结束,胜,排名变成:
A
F
C
D
E
B
然后这时E也获胜:
一种设计是E的挑战白费了,名次不变,这样如果玩家注意到辛辛苦苦挑战白费,可能会不爽。
另一种更合理的逻辑是E挑战成功后排名变成:
A
F
E
C
D
B
相当于E名次窜到CD之前,而CD的名次向后顺延。这种设计的合理之处在于“任何一个玩家X,如果他的名次在另一个玩家Y之前,那么他要么直接战胜过Y,要么战胜过战胜过Y的玩家Z,即X直接或间接强于Y”。E挑战B时,B排在CD之前,即E挑战B时B强于CD,那么战胜了B的E也强于CD,所以把E排在他们前面,而对于C和D,由于有两人同时战胜了强于他们的B,所以他们的名次被向后顺延。
这里会产生更复杂的情况,因为C和D可能同时挑战了别人和被别人挑战,所以当E战胜,发现B不在原位时,不能单纯以CD作为参照物往上爬,同样的道理F作为参照物也是靠不住的,——事实上没有一个玩家是靠得住的参照物,因为大家都可能在变;也不能单纯用E挑战B时他们的排位差值,因为CDF都可能在E结束之前爬得更高,同时也可能有下面的玩家爬上来挤进从E到F的这一段内……
这种复杂需求要解决也不是没有办法,比如当任何一个玩家X在挑战比他高的玩家Y时,可以往Y的手里放一个参照物,参照物有可变的属性标明假如挑战获胜是互换还是爬到参照物的后一名,当Y因为各种原因要换位时,参照物传递给下一个合适的玩家………