目录
第一种三子棋
创作原因
这个棋不是网上流行的成三棋,我也不知道这个棋叫什么。由于这个棋是(横竖斜)连成三个就获胜,所以我暂时给它起名叫三子棋。至于为什么写这个博客,一是因为这个棋简单,是我见过的第二简单的棋,第一简单的是区字棋,二是这是我小时候赶大集时跟别人学的棋,现在想想也是一个美好的回忆,所以就暂时记录下来,代码实现后面有时间再写。
游戏规则
1、初始状态:棋盘为三乘三的棋盘,双方各三个棋子,分别摆在靠近棋手的一行上。
2、双方交替行子,每次棋子只能上下左右移动一个单位。
3、直至一方棋子连成三个获胜,横竖斜都算,不过不能是自己的初始状态。
初始状态图
X | X | X |
O | O | O |
证明过程
本来我还是想用区字棋的证明方法来证明这个问题,但算了算状态数目,感觉虽然很少,但只是相对于计算机而言,人力列举真的很困难。
状态数,即便排除大量等效,状态数也在一百以上。但我代码能力很差,而且也没有学过博弈论相关知识,不知道该怎么解决这类问题。我想既然画状态图不现实,那我可不可以画博弈树呢?但需要代码。而且循环状态怎么解决,我还是不会。所以代码实现这个问题博弈树就算是我挖下的坑吧。
当时在高铁上无聊,就开始手搓博弈树。画了三个多小时,没有结果,状态越花越多,还要检验与之前的状态有没有重复。最后我放弃了,问我旁边的学长。学长说挺简单的,但不要手搓(大哭)。他了解了之后,想了想,说,我根据后手策略,认为这个棋永远和棋,因为可以阻碍对方连成三。先手策略他还没研究。这点倒是提醒了我,为什么不从棋手的角度来考虑问题呢?于是,我放弃了画博弈树,直接以先手的角度代入怎么下棋,结果突然发现原来先手有简单必胜的策略,证明如下。
先手必胜的证明
注:红为先手,蓝O为后手。先手为必下策略,后手为可能策略,相当于解象棋围棋五子棋的残局。第一和第二个照片是第一步不同。
第一步走中间:
第一步走两边:
先手策略总结:前四步连续前冲就可以赢棋。
失败的博弈树(三个多小时的成果)
第二种三子棋
游戏规则
初始棋盘3X3,棋盘上没有子。
落子阶段:先后手依次落子各三枚,三子连成一条线者胜(横竖斜)。
行子阶段:若落子阶段未决出胜负,先手方先行,双方依次行子,每次行子只能让一枚棋子前后左右行一步,不能斜走。直至三子连成一条线者胜(横竖斜)。
先手必胜
在当前游戏规则下先手必胜,例证如下:
定义先手为X,后手为O。
先手第一步先下中间(边角没试过),后手可下边可下角。
后手下边
5X | 2O | 4O |
6O | 1X | |
3X |
第3手X应下在远离第2手O的角上,在表2中左下右下都可以,反正对称。
第4手O只能堵1X、3X形成的连线,在表2中堵在右上角;第5手X只能堵2O、4O形成的连线。
第6手有两种可能,要么堵3X、5X之间的连线,要么堵1X、5X之间的连线,在规则定义下X都会胜利。第一种情况如表2所示,只要将3X往右连走两步就可以胜利,又因为X先走,3X会比4O先到达右下角位置。
第二种情况如表3:
5X | 2O | 4O |
1X | ||
3X | 6O |
此时无论是否X先走,X终将胜利,只要1X往左走一格就可胜利。
后手下角
5X | 4O | 2O |
1X | ||
3X | 6O |
3X应下在远离2O的边上,对应表4应是左边或下边。
表4中3X下在了下边,4O只能堵1X、3X连线;5X只能堵2O、4O连线;6X只能堵1X、5X连线。
若X先走,则X赢;若O先走,则O赢。若X先走,1X左移,3X左移,2步胜;若O先走,2O下移,4O右移,2步胜。由于左下角和左边被X包围,O无反制手段,只能与X比谁先赢。同样,若O先走,则2O下移,右上角被O包围,X无反制手段,只能与O比谁先赢。
提高三子棋游戏公平性的思考
一般来讲,可玩性好的棋类游戏都是相对公平的,而先手必胜本身就是一种不公平,那么如何能提高上述三子棋游戏的公平性呢?
可以参考同样是先手必胜的五子棋,人们为了限制先手方的优势,便发明出了禁手、三手交换、五手多打、只能下26种固定开局等等规则,而我们的三子棋又怎么修改规则来保证公平性呢?
增加斜走可能
第一种、第二种五子棋均成立。
可以将田字格棋盘改为米字格棋盘,即角上的棋子可以移动到中间、中间的棋子可以移动到角上。
类似的可以可以将棋子可以在任意位置斜走(上面规则的加强版)。
上面的两种修改方式对第一种和第二种三子棋都有用,主要思想是让劣势方有更多的移动空间,通过斜走的方式堵住即将成连线的优势方。次要思想是加快移动速度,让原先两步才能到位的变成一步到位。
改变行子先后手
主要针对第二种三子棋。在第二种棋子后手下边后手下角的分析中,我们发现,当落子结束后、行子开始时改变先后手(即先落子的后行子),本来必胜的局面,会往和棋的方向发展。事实上,经研究,的确是和棋,因为形成了循环,类似我之前研究的区字棋的循环一样。建议后面的研究思路是画出状态转移图,在和棋条件下证明是先手优势还是后手优势。
未来的研究方向
1、在修改规则之后,两种三子棋是否为和棋?若为和棋,谁优谁劣?如条件允许,可以画出状态转移图。
2、第2种三子棋我证明了先手下中间是必胜的,而且给出了例证(例证即最优解)。若先手下中间是否必胜?
3、用代码(C/C++/python)实现其中一种规则的三子棋棋类游戏,不是井字棋。若能添加AI对战、悔棋模式、打谱模式更好了。
4、可以借助机器学习、深度学习、启发式学习等等实现相关AI的创造。
第3、4条对所有棋类研究都通用。
行棋策略
压缩敌方空间,占领有利位置;通过造攻势来迫使敌方行在我方想要其下的位置。