前面已经实现了整个游戏流程,现在讲五子棋AI的实现,五子棋AI的实现方法主要是以下几种:
1.查表法,保存一些棋谱,电脑下棋的时候自动匹配
2.分值法:对棋盘上的每一个空位进行检索,假设这个空位放某种棋子,然后根据不同的情况给出不同的分值,在分值最高的地方下棋
3.博弈树:列出所有情况,用极大极小值搜索选出最佳路径
4.电脑每次输掉棋局后,保存记录,以后不再重复
这里只说分值法:我的想法是把棋子的状态分出来:活1,死1,活2,死2,眠2,活3,死3,眠3,活4,死4,眠4,成5
这里有些情况的效果是一样的比如,成5,活4,双活3,双眠4这些都是必赢的,好了不说了,上代码最直观
/**五子棋AI
*思路:对棋盘上的每一个空格进行估分,电脑优先在分值高的点落子
* 棋型:
* 〖五连〗只有五枚同色棋子在一条阳线或阴线上相邻成一排
* 〖成五〗含有五枚同色棋子所形成的连,包括五连和长连。
* 〖活四〗有两个点可以成五的四。
* 〖冲四〗只有一个点可以成五的四。
* 〖死四〗不能成五的四。
* 〖三〗在一条阳线或阴线上连续相邻的5个点上只有三枚同色棋子的棋型。
* 〖活三〗再走一着可以形成活四的三。
* 〖连活三〗即:连的活三(同色棋子在一条阳线或阴线上相邻成一排的活三)。简称“连三”。
* 〖跳活三〗中间隔有一个空点的活三。简称“跳三”。
* 〖眠三〗再走一着可以形成冲四的三。
* 〖死三〗不能成五的三。
* 〖二〗在一条阳线或阴线上连续相邻的5个点上只有两枚同色棋子的棋型。
* 〖活二〗再走一着可以形成活三的二。
* 〖连活二〗即:连的活二(同色棋子在一条阳线或阴线上相邻成一排的活二)。简称“连二”。
* 〖跳活二〗中间隔有一个空点的活二。简称“跳二”。
* 〖大跳活二〗中间隔有两个空点的活二。简称“大跳二”。
* 〖眠二〗再走一着可以形成眠三的二。
* 〖死二〗不能成五的二。
* 〖先手〗对方必须应答的着法,相对于先手而言,冲四称为“绝对先手”。
* 〖三三〗一子落下同时形成两个活三。也称“双三”。
* 〖四四〗一子落下同时形成两个冲四。也称“双四”。
* 〖四三〗一子落下同时形成一个冲四和一个活三。
* 分值表
* 成5:100000分
* 活4:10000分
* 活3+冲4:5000分
* 眠3+活2:2000分
* 眠2+眠1:1分
* 死棋即不能成5的是0分
* @return {[type]} [description]
*/
function getPosition() {
var a = new Array(2);
var score