首页 > 代码库 > 人机博弈,吃子棋游戏(一)
人机博弈,吃子棋游戏(一)
(1)什么是吃子棋?
吃子棋,是小孩子学围棋的入门棋,其规则部分取自于围棋,但比围棋简单很多。
(2)吃子棋的行棋规则?
1.吃子棋,在行棋时,若一方棋子没有被打吃,则其必须落子在能够紧对方棋子气的位置。
2.吃子棋,当一方棋子处于被打吃的状态,则可以逃命,而不用紧对方棋子的气。
3.吃子棋,当一方棋子被吃提,则输赢即分,吃子方胜。
4.吃子棋,一般有两种赢棋方式,双打吃和征吃。
5.吃子棋,起手棋必须位于天元。
(3)应用设计思路
设计此应用的总体思路如下:
DATA:
1.棋盘表示
2.棋子表示
3.计算棋子棋的辅助数据
AI:
1:走法产生(依据行棋规则,产生走法)
2:估值核心(暂时的思路是对双方一气,两气棋窜进行分析统计,并对双打吃与征吃进行特别处理)
3:优秀走法搜索引擎(暂时仅使用极窄窗口搜索,一种优化过的alpha-beta搜索)
UI:
cocos2d-x 3.2
绘制棋盘,棋子,开始界面,背景等。(4)吃子棋AI
鉴于吃子棋的规则,在做AI时,也容易许多。题外话,目前现在围棋的AI多为双重随机-蒙特卡罗算法之类吧,有兴趣读者可以研究下。
1.走法生成:
走法的生成会相对容易很多,因为吃子棋大多数情况下,每一步都要紧对方的气,而少数情况只能长气逃命,因此前中期合理走法很少,而游戏很少发展至后期。
2.估值核心:
对于棋面的判断也相对容易,不需要考虑地域与势等抽象概念,这些抽象的概念连当下计算机科学家都没有找到比较好的解决办法。但这一部分要测试非常难,要微调很多参数,感知棋力变化。对于未发生提子的叶子结点,判断形势与输赢。1.轮到我下,对方存在一个一气的棋窜,则我胜利。2.轮到我下,对方不存在一个一气的棋窜,而我有两个一气的棋窜,则我失败。3.轮到我下,敌方不存在一气的棋窜,若我没有1气的窜,对方可有两气棋窜,若有开始考虑,双打吃与征吃的可能。4.同三情况考虑自己,我方仅存在一个一气窜,则考虑是否被征吃,以及双打吃。5.都没有出现,考虑一些其他的额外参数。
3.搜索引擎:PVS,如果有性能需求考虑使用置换表。
写在最后:
我曾兼职围棋入门班的助教,深知陪着4,5岁小孩子下围棋是一件很头大的事,因为他们下棋时经常会哭鼻子闹脾气刷淘气。孩子们刚入门时下得是吃子棋,下课回家都是家长陪着下,同样无论输赢都是一件头大的事,但是家长们都说孩子和电脑对战不会哭鼻子闹脾气耍淘气。
于是,我上网搜索有没有吃子棋对战软件,使家长脱离苦海,也使孩子能够专心下棋而不是哭鼻子闹脾气耍淘气,但未找到,可能是需求过少的缘故,一般孩子们下一周的吃子棋就可以下真正的围棋了。
目前,本人正在用业余时间,研发此游戏。欢迎和广大围棋爱好者,吃子棋爱好者多多交流。
转载请标明出处,谢谢
人机博弈,吃子棋游戏(一)