自己写的一个五子棋算法,大家有兴趣的给点意见~
我主要实现的是三三禁手和四四禁手,首先在程序中给出活三和活四的定义,然后判断三三禁手的规则:若该棋子能形成2个或2个以上的活三就算三三禁手了,同样,四四禁手的规则:若该棋子能形成2个或2个以上的活四就算禁手。具体的实现过程:1)首先判断该棋子的可能会形成活三或者活四的方向,就是若有同色的棋子与该棋子相邻或者隔一个位置相邻,就记下他们的方向;2)然后逐个方向进行判断是否禁手,判断过程按照该棋子在这个方向上形成的长度(即在该方向上与这个棋子相连的所有棋子的个数)来进行,长度为1,2,3的情况都需要是否会形成双三或双四,长度为4的情况只需要判断是否会形成双四;3)双三的判断过程,首先看该棋子在这个方向上是否已被封住(即判断沿着这个方向的最后一个棋子的下一个位置是否有反色的棋子,若有,则表示该方向已被封住),若该棋子在这个方向上已被封住,则不会形成活三,也就不会形成双三禁手;而如果该棋子在这个方向上没有被封住,就继续判断它是否会形成活三;4)活三的判断,我采用模拟棋子的办法,就是分别在这个方向的尽头处的下一个位置模拟一颗同色棋子,判断模拟的这颗棋子是否会形成活四,判断完后,删除该模拟的棋子,再在相反的方向同样模拟棋子并判断,最后只要有任一方向的模拟棋子可以形成活四就表明该棋子形成了一个活三;5)活四的判断就很容易了,也同样采用模拟棋子的办法;6)最后,在所有可能形成产生禁手的方向判断完后,统计该棋子形成活三和活四的个数,大于等于2个的就算是禁手了~~
不知道大家对这个算法有什么建议?对于网上的一些更复杂的禁手规则,我还没有什么好的想法来实现,有兴趣和大家交流交流~~~