练习了两年的java推箱子算法程序,开始练习一下象棋C算法程序吧。虽然java版的弄了个半成品,好歹也算是颇有斩获。不熟练C语言不太好意思跟别人说会编程,所以本次用C语言先从残局一点一点练练吧。现在回看,那个双向搜索java推箱子的博文太青涩了,程序功能也不是很强大,中间又分析得似是而非,最近也没有很好的收尾,除了个人水平的原因,也是因为永远都有更好的算法,只是我没有发现。没有止境.......
根据象棋的游戏规则,除了卒以外,都能走回到原来的位置(虽然象棋规则不允许这样),所以可以把象棋算法的数据结构写成有向图,但是当作树来处理。每一个节点就是棋盘上棋子位置的组合。
发现 网站http://www.xqbase.com/computer/eleeye_intro.htm以开源的方式讲解了象棋的智能算法。还是先看看再说。
弄点最基本的思路吧,高深的东西@#¥%&
象棋电脑“终极对弈”的基本逻辑 :
1,因红先黑后,所以理论上红方必胜,平局都算红方输。找一局红方胜利的专业棋局,且步骤要长点的,咋的也得300步吧。
象棋步数 :http://www.gdchess.com/bbs/dispbbs.asp?boardid=30&id=98100&authorid=0&page=0&star=1
2,不断悔棋,拆解,形成阿尔法-贝塔树。黑方赢棋的话,为误招。红方赢棋为正招。
3,黑方优先防守。红方优先进攻。这样也许能尽快得出理论上的“终极对弈”。
3,每一步的分析逻辑如下(作为基本智能,只分析当前一步) :
1) 是否能直接将军。是的话就将军。(不管能否赢棋)
2) 己方是否被将。是的话红方按照以下策略顺序防守: 吃掉对方将军的棋子--->挡(蹩马腿)--->躲将。
黑方按照以下策略顺序防守: 躲将--->挡(蹩马腿)--->吃掉对方将军的棋子。
3) A 能否吃对方的棋子。
B 是否被对方吃子。
优先级:车、马、炮、相、仕、兵。
4) 吃子的优先级高就吃子。
5) 被吃的优先级高:
红方按照以下策略顺序防守: 吃掉对方进攻的棋子--->挡(蹩马腿)--->躲。
黑方按照以下策略顺序防守: 躲--->挡(蹩马腿)--->吃掉对方进攻的棋子。
6) 进攻。吃将--->吃最近的对方棋子。
总结:通过这种基本逻辑进行逐步自学。感觉自己萌萌哒。¥%……*&%