前端实现五子棋小游戏2(AI实现人机对战)

AI难点解析

赢法数组

三维数组,前两维是棋盘,第三维是赢法数组;每一种赢法对应一个二维棋盘,上面或许只有5个点是true,这5个点一定连成一条线

赢法的统计数组

是个一维数组,主要统计每一种赢法的实现程度,如5个为true的点,此时黑棋落下两个点,此时该数组会有A3=2这样一个记录。

判断胜负

基于赢法的统计数组而定

计算机的落子规则

基于赢法的统计数组而定

代码实现

赢法数组

// 赢法数组,保存五子棋所有赢法

var wins = [];
for (var i = 0; i < 15; i++) {
    wins[i] = [];
    for (j = 0; j < 15; j++) {
        wins[i][j] = [];
    }
}

赢法种类的索引

横线赢法

k循环代表赢法种类,k=0为第0种赢法;
wins[i][j + k]在棋盘上连成一条线;
比如 i=0 j=0 count=0时:
wins[0][0][0]=true;
wins[0][1][0]=true;
wins[0][2][0]=true;
wins[0][3][0]=true;
wins[0][4][0]=true;
此时00 01 02 03 04五个为ture的点连成一条线,代表第一种赢法
即count=0时:wins[][][0]=true,为第1种赢法,则可能是
在这里插入图片描述


count=1时:wins[][][1]=true,为第2种赢法,则可能是


在这里插入图片描述

// 赢法种类的索引
var count = 0;
for (var i = 0; i < 15; i++) {
    for (j = 0; j < 11; j++) {
        for (k = 0; j < 5; k++) {
            wins[i][j + k][count] = true;
        }
        count++;
    }
}

竖线赢法

//  赢法种类的索引-竖线赢法
for (var i = 0; i < 15; i++) {
    for (var j = 0; j < 11; j++) {
        for (var k = 0; k < 5; k++) {
            wins[j + k][i][count] = true;
        }
        count++;
    }
}

横线赢法

// 赢法种类的索引-横线赢法
for (var i = 0; i < 15; i++) {
    for (var j = 0; j < 11; j++) {
        for (var k = 0; k < 5; k++) {
            wins[i][j + k][count] = true;
        }
        count++;
    }
}

斜线赢法

// 赢法种类的索引-斜线赢法
for (var i = 0; i < 11; i++) {
    for (var j = 0; j < 11; j++) {
        for (var k = 0; k < 5; k++) {
            wins[i + k][j + k][count] = true;
        }
        count++;
    }
}

反斜线赢法

// 赢法种类的索引-反斜线赢法
for (var i = 0; i < 11; i++) {
    for (var j = 14; j > 3; j--) {
        for (var k = 0; k < 5; k++) {
            wins[i + k][j - k][count] = true;
        }
        count++;
    }
}

打印count赢法统计,显示得共有572种赢法
在这里插入图片描述

赢法的统计数组

// 赢法的统计数组
var myWin = [];
var computerWin = [];

//onclick落子的时候加入
  if (over) {
        return;
    }
for (var k = 0; k < count; k++) {
            if (wins[i][j][k]) {
                // 黑棋落子
                myWin[k]++;
       
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值