2)、兵法发动机会的分配
如果部队在某一日成功把握住了一次发动机会,那么是否就一定会发动兵法呢?未必,因为还存在一个机会的分配过程,即这次机会到底应该由谁来利用。分配的算法流程大致如下:
建立可分配(最小间隔、健康状态等限制条件)的武将链表PersonList,链表中的武将按照位置排序;
ForeachOfficerinthePersonList
if分到机会thenexit
elseremovethisofficerfromthePersonList
end
其中是否“分到机会”的计算因武将所选的兵法不同而不同。游戏程序针对不同的兵法设计了多个分配函数,不过这些分配函数采用统一的公式计算分配到机会的概率:

按照这个计算公式,对于单人部队而言,如果阵形利于兵法的发动,而且武将位于前锋或中锋,那么一定可以成功分配到把握住的兵法机会。因此对于这种部队,能否发出兵法完全取决于部队能否成功把握住兵法机会。实际经验也表明:防守的时候,采用单人部队迎击的话,常常第一旬内就能够发出兵法。其实这正是因为在自地域作战,部队把握兵法机会的概率提高,因此一旬内把握住一次机会的概率就大大提高了,而一旦把握住,肯定不会分丢的。对于更多的情况,由于分配到兵法机会的概率<100%,因此并不是一旦把握住就一定能发动出来的。不过这个概率的最小值为25%,因此整个部队所有武将都分配不到一次把握住的机会的概率应该是比较小的,但分丢并不是不可能的。
每种兵法的分配函数中都硬编码了利于这种兵法发动的阵形代号,一般的兵法大概有那么2~3种。对于谋略系、策略系的兵法,并没有哪种特别的阵形利于发动,因此在上面的机会分配概率公式中,f(兵法,阵型)一项始终为1,因此谋略系、策略系兵法分配到兵法机会的最大概率为62.5%(单人、前锋),实战中也常常感觉到谋略系、策略系兵法不太容易发出。各种兵法的有利阵形列于下:
步兵系:0、1、15、18、19(鱼鳞、鹤翼、山越、南蛮、倭);
骑兵系:2、3、16、17(锥形、锋矢、乌丸、羌);
弓骑兵:2、5、16(锥形,箕形、乌丸);
弩兵:4、5、8(雁形、箕形、井阑)。
另外值得一提的是,偶在跟踪代码时发现这样的一个问题:对于如图所示的部队,在分配机会时似乎只判断了锋线上的武将,其他4个尚未判断就结束了,而锋线上的武将的兵法是发不出来的,因此总是把机会给分丢掉。实际试了一下,好像的确发不出兵法来,不过相信没有人会如此组队吧。

图1不会发兵法的组队
关于兵法发动的总结:
1)、部队的状态、部队所在地域影响部队对兵法机会的产生概率;
2)、武将的位置影响分配到机会的概率,前锋/中锋=1.25倍,中锋/后卫=1.33倍;
3)、阵形对分配到机会的概率的影响很显著,有利/不利=2倍;
4)、人数也会影响分配概率。人数越多,每个人分配到的概率都会降低,不过总的分丢概率却未必会低;
5)、如果兵力允许的话,尽可能拆分组队。举个例子:3个武将30000*1组队与1000*3组队,假设全选有利阵形,全在前锋,而且假设一个部队一旬内一定能够把握住3次机会,则发动3次兵法的概率:3人队:24.4%,3*1人队:100%。
6)、由于所有的部队产生兵法机会的概率都是一样的,因此真正影响兵法发动的因素在于分配时的概率。