快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

和记娱乐登录:ESBasic 可复用的.NET类库(03) -- 圈 Circle



1.缘起:

假设我们要开拓一个多人跳棋游戏。在跳棋游戏中,当一小我走一步棋之后,节制权就轮到下一家,如斯轮询,一圈之后节制权又回到自己,然后再继承轮圈下去。我们可以应用数组或列表等数据布局来办理这种转圈圈的问题,然则始终都不敷直不雅。

我设计了Circle来对“圈”这种数据布局进行抽象,我们在类似跳棋这样的游戏中可以异常方便地直接应用它。

Circle的形象示意图如下:

2.适用处合:

必要类似“圈&和记娱乐登录rdquo;这样的数据布和记娱乐登录局支持的场合。

3.设计思惟与实现

Circle也是一个异常简单的数据布局,其类图如下所示:

从类图中显示的Header和Tail属性,我们看出Circle就像一个真正的现实中焊接而成的铁圈一样,是有结合点的,这个结合点便是Tail与Header交代的地方。

Append措施用于将一个新的工具附加到Tail后面,于是这个新的工具就变成了真正的Tail。

Insert措施用于在指定的地方插入一个新工具,假如当前Circle中没有任何工具,则无论其指定的位置是哪里,都将被放置在Header的位置。

SetCurrent措施用于将节制权转交给参数指定的工具。假如指定的工具在Circle中不存在,则SetCurrent将不履行任何操作。

MoveNext措施和MoveBack措施表示将节制权转移到下一家或上一家。

PeekNext措施和PeekBack措施与MoveNext、MoveBack含义不一样的处所在于:MoveNext、MoveBack转移了节制权,而PeekNext和PeekBack没有,它们只是返回下一家或上一家工具。

关于Circle的实现要留意以下几点:

(1)Circle的内部是应用List来寄放工具的。

(2)Circle没有进行任何加锁节制,以是它不是线程安然的。我们类似跳棋这样转圈圈的游戏,平日都因此一个有序的顺和记娱乐登录序来节制游和记娱乐登录戏的进行的,很少呈现多个线程同时改动一个Circle的节制权的环境,以是在类似这样的情况中,Ci和记娱乐登录rcle就不必要加锁了。

(3)留意,InsertAt措施和RemoveAt措施接管的参数postionIndex的值容许比内部List的最大年夜索引值还大年夜,它们在实现时会对postionIndex进行求模运算,将postionIndex修正到精确的范围内,在对List进行Insert和Remove操作。

4. 应用时的留意事变

(1)Insert措施并不会改变Circle确当前工具(即Current属性的值)。

(2)当Circle中不包孕任何元素时,Header、Tail和Current属性返回的都是default(T)。假如T是引用类型,则这个值是null。

(3)当Circle中只包孕一个元素时,Header和Tail属性将返回同一个工具。

5.扩展

圈Circle暂时没有任何扩展。

在我们后面先容的CircleTaskSwitcher(轮回义务切换器),它的实现就用到了本节的Circle。

您可能还会对下面的文章感兴趣: