简介 目录 评价 推荐
  • weixin_慕丝4233278 2020-01-18
    我想知道为什么计算机下的棋子是透明的,根本找不到在哪里
    2回答·862浏览
  • 慕勒5135046 2019-11-27
    怎么给游戏设置一个“重新开始”的功能

    把开始的数据的DOM清除一下

    1回答·1448浏览
  • ensheart 2019-10-12
    ai先手怎么实现

    me先等于false,然后先调用一次computerAI函数


    1回答·769浏览
  • qq_慕用6401962 2019-09-23
    为什么说j未定义啊
    2回答·852浏览
  • qq_面朝黄土_0 2019-06-22
    computer AI 聪明不聪明再说,每次都是循环 15*15*572= 128700次 不崩溃么?

    崩溃不崩溃的要看你的电脑怎么样呀

    1回答·288浏览
  • Cosy_0328 2019-05-13
    朋友们

    同问,这算AI的一种吗?

    2回答·684浏览
  • 慕UI6139813 2019-04-18
    如何解决人机偶尔不成棋

    计算有问题,就会,

    1回答·1000浏览
  • qq_慕沐3338836 2019-02-15
    为什么只要有五颗棋子在一排就弹出赢了,不判断黑白棋

    if (chessArr[i][j] == 0) {

    drawChess(i, j, me);

    if (me) {

        chessArr[i][j] = 1;

    } else {

        chessArr[i][j] = 2;

    }

    me = !me;

    for (var k = 0; k < count; k++) {

        if (wins[i][j][k]) {

        if(chessArr[i][j] == 1 ){ //这个表示我方赢了      

                 myWin[k]++;

                 computerWin[k] = 6;

                 if (myWin[k] == 5) {

                     window.alert("you win !!!");

                    over = true;

                 }

            }else{

                 myWin[k] = 6;

                 computerWin[k] ++ ;

                 if (computerWin[k] == 5) {

                     window.alert("计算机赢了");

                     over = true;

                 }

            }

        }

    }

    }


    2回答·1377浏览
  • qq_慕沐3338836 2019-02-15
    代码一样为啥我的先是弹框出来,后面才落子。想要先落子,再判断

    我知道啦,

    if (myWin[k] == 5) {

    setTimeout(function(){

    window.alert("你赢了");

    },0);

    over = true;

    }

    这样就可以了

    2回答·1309浏览
  • qq_慕田峪5101710 2019-01-30
    只要下的子多了它就判定不了胜负了

    自己写一个上下遍历的over判断是否结束游戏的方法

    1回答·1158浏览
  • qq_阿法狗狗狗_04402230 2018-11-16
    能不能实现电脑先下棋呢?

    可以的  

        1 在 ia  计算得分前 判断 棋盘上是否 有子 

            如果有 

                    那么就走正常流程 

            如果没有 

                    就随机挑选一个坐标 就可以了


    1回答·1104浏览
  • scj_wcl 2018-10-25
    只有myWin[k] < 5(4 3 2 1)的时候才会提示你赢了

    ..我知道了

    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 ++;
        }
    }


    这些循环我都把k < 4 了

    1回答·1016浏览
  • 慕圣8509492 2018-10-06
    算法怎么改进

    那个位置的赢法数组里包含了这两个赢法。计算的时候都进行了加分处理,这个位置的分数最高,肯定被找出来了

    1回答·1916浏览
  • Elias丿纯黑 2018-10-01
    电脑的步数设置为六有没有意义呢?

    有意义

    1回答·1092浏览
  • 慕瓜1580735 2018-09-05
    代码跟着全部敲完,但是me连着五个棋子不会弹出我赢了?
    0回答·992浏览
  • qq_宸星_0 2018-07-13
    关于canvas的x和y坐标 对于 数组棋盘数据的对应关系

    canvas的原点是在左上角开始,那么i=0的时候,j从0到14,那么就是最上面的一条横线了,[0][0] ,[0][1].... ,[0][14]

    1回答·1466浏览
  • qq_我的世界_11 2018-06-15
    那位大神给看看我的代码,电脑从第二步开始就看不见棋子了我都对了三四遍代码了,就是看不出来
    已采纳 qq_克克的_0 的回答

    完整代码地址:

    https://gitee.com/yanglilong127/ai_manmachine_war_chess

    该游戏演示地址:

    https://yanglilong127.gitee.io/ai_manmachine_war_chess

    2回答·1348浏览
  • qq_永不言弃_27 2018-05-07
    老师为什么j<11

    下一层是k<5,j+k就是边界

    1回答·1166浏览
  • 该种树啦 2018-03-23
    bug怪怪

    最好放点代码或者console的报错出来 这么干说也没法看呀,

    话说你可以换个浏览器试试,我之前用chrome 棋子渲染一直不对,换IE就好了

    1回答·1165浏览
  • 该种树啦 2018-03-23
    那里有源码
    已采纳 qq_牵手蓠祛_0 的回答

    这代码两不多照着写。没问题的。

    /**

     * 

     */

    var me = true;

    var chessBorad = [];

    var over = false;

    //赢法数组

    var wins = [];

    //赢法统计数组

    var myWin = [];

    var computerWin = [];


    for(var i = 0;i < 15;i++){

    chessBorad[i] =[];

    for(var j = 0;j < 15;j++){

    chessBorad[i][j] =0;

    }

    }


    //赢法数组初始化

    for(var i = 0;i < 15;i++){

    wins[i] =[];

    for(var j = 0;j < 15;j++){

    wins[i][j] =[];

    }

    }


    var count = 0;

    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 < 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 < 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++;

    }

    }


    for(var i = 0;i<count ;i++){

    myWin[i] = 0;

    computerWin[i] = 0;

    }

    var chess = document.getElementById('chess');

    var context = chess.getContext('2d');

    context.strokeStyle = "#BFBFBF";

    var logo = new Image();

    logo.src="images/8.jpg";

    logo.onload = function(){

    context.drawImage(logo,0,0,450,450);

    drawChessBoard();

    }

    var drawChessBoard=function(){

    for(var i=0;i<15;i++){

    context.moveTo(15+i*30,15);

    context.lineTo(15+i*30,435);

    context.stroke();

    context.moveTo(15,15+i*30);

    context.lineTo(435,15+i*30);

    context.stroke();

    }

    }

    var onStep = function(i,j,me){

    context.beginPath();

    context.arc(15 + i * 30,15 + j * 30, 13, 0, 2 * Math.PI);

    context.closePath();

    var gradient = context.createRadialGradient(15+i*30+2,15+i*30-2,13,15+i*30+2,15+i*30-2,0);

    if(me){

    gradient.addColorStop(0,"#0A0A0A");

    gradient.addColorStop(1,"#636766");

    }else{

    gradient.addColorStop(0,"#D1D1D1");

    gradient.addColorStop(1,"#F9F9F9");

    }

    context.fillStyle = gradient;

    context.fill();

    }

    chess.onclick = function(e){

    if(over){

    return;

    }

    if(!me){

    return;

    }

    var x = e.offsetX;

    var y = e.offsetY;

    var i = Math.floor(x / 30);

    var j = Math.floor(y / 30);

    if(chessBorad[i][j] == 0){

    onStep(i,j,me);

    chessBorad[i][j]=1;

    for(var k=0;k<count;k++){

    if(wins[i][j][k]){

    myWin[k]++;

    computerWin[k]=6;

    if(myWin[k]==5){

    alert("你赢了");

    over = true;

    }

    }

    }

    if(!over){

    me = !me;

    computer();

    }

    }

    }



    var computer = function(){

    var myScore = [];

    var computerScore = [];

    var u =0;

    var v = 0;

    var max = 0;

    for(var i=0;i<15;i++){

    myScore[i]=[];

    computerScore[i]=[];

    for(var j=0;j<15;j++){

    myScore[i][j]=0;

    computerScore[i][j]=0;

    }

    }

    for(var i=0;i<15;i++){

    for(var j=0;j<15;j++){

    if(chessBorad[i][j]==0){

    for(var k=0;k<count;k++){

    if(wins[i][j][k]){

    if(myWin[k]==1){

    myScore[i][j]+=200;

    }else if(myWin[k]==2){

    myScore[i][j]+=400;

    }else if(myWin[k]==3){

    myScore[i][j]+=2000;

    }else if(myWin[k]==4){

    myScore[i][j]+=10000;

    }

    if(computerWin[k]==1){

    computerScore[i][j]+=220;

    }else if(computerWin[k]==2){

    computerScore[i][j]+=420;

    }else if(computerWin[k]==3){

    computerScore[i][j]+=2100;

    }else if(computerWin[k]==4){

    computerScore[i][j]+=20000;

    }

    }

    }

    if(myScore[i][j]>max){

    max = myScore[i][j];

    u = i;

    v = j;

    }else if(myScore[i][j]==max){

    if(computerScore[i][j]>computerScore[u][v]){

    u = i;

    v = j;

    }

    }

    if(computerScore[i][j]>max){

    max = computerScore[i][j];

    u = i;

    v = j;

    }else if(computerScore[i][j]==max){

    if(myScore[i][j]>myScore[u][v]){

    u = i;

    v = j;

    }

    }

    }

    }

    }

    onStep(u,v,false);

    chessBorad[u][v]=2;

    for(var k=0;k<count;k++){

    if(wins[u][v][k]){

    computerWin[k]++;

    myWin[k]=6;

    if(computerWin[k]==5){

    alert("你输了");

    over = true;

    }

    }

    }

    if(!over){

    me = !me;

    }

    };


    1回答·1331浏览
  • 月下不知十年后的八月 2018-03-07
    为啥横向连续和竖向不拦截,请问有demo吗
    0回答·1003浏览
  • 一生安好 2018-02-23
    怎么方格子背景没有了
    0回答·1176浏览
  • 一生安好 2018-02-16
    55555不知道错哪了
    已采纳 幕布斯0246692 的回答

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


    这块儿:

    myScore[i]=0;
    computerScore[i]=0;

    应该是:

    myScore[i]=[];
    computerScore[i]=[];

    初始化一个二维数组。

    2回答·1439浏览
  • 一生安好 2018-02-16
    求源码啊求源码啊
    let chessBoard = [];
    let me = true;
    
    let over = false;
    let wins = [];
    
    let myWin = [];
    var computerWin = []
    
    for (var i = 0; i < 15; i++) {
        chessBoard[i] = []
        for (var j = 0; j < 15; j++) {
            chessBoard[i][j] = 0
        }
    }
    
    for (var i = 0; i < 15; i++) {
        wins[i] = []
        for (var j = 0; j < 15; j++) {
            wins[i][j] = []
        }
    }
    
    var count = 0
    
    for (var i = 0; i < 15; i++) {
        for (var j = 0; j < 11; j++) {
            for (k = 0; k < 5; k++) {
                wins[i][j + k][count] = true
            }
            count++
        }
    }
    
    for (var i = 0; i < 15; i++) {
        for (var j = 0; j < 11; j++) {
            for (k = 0; k < 5; k++) {
                wins[j + k][i][count] = true
            }
            count++
        }
    }
    
    for (var i = 0; i < 11; i++) {
        for (var j = 0; j < 11; j++) {
            for (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 (k = 0; k < 5; k++) {
                wins[i + k][j - k][count] = true
            }
            count++
        }
    }
    
    console.log(count)
    
    for (var i = 0; i < count; i++) {
        myWin[i] = 0
        computerWin[i] = 0
    }
    
    var chess = document.getElementById('chess')
    var context = chess.getContext('2d')
    
    context.strokeStyle = '#BFBFBF'
    
    var logo = new Image()
    logo.src = " " //image path
    window.onload = function () {
        // context.drawImage(null, 0, 0, 450, 450)
        drawChessBoard()
        // oneStep(0, 0, true)
        // oneStep(1, 1, false)
        // context.beginPath()
        // context.arc(200,200,100,0,2*Math.PI)
        // context.closePath()
        // var gradient = context.createRadialGradient(200,200,50,200,200,20)
        // gradient.addColorStop(0,'#0A0A0A')
        // gradient.addColorStop(1,'#636766')
        // context.fillStyle = gradient
        // context.fill()
    }
    var drawChessBoard = function () {
        for (var i = 0; i < 15; i++) {
            context.moveTo(15 + i * 30, 15) //15
            context.lineTo(15 + i * 30, 435) //435
            context.stroke()
            context.moveTo(15, 15 + i * 30) //15
            context.lineTo(435, 15 + i * 30) //435
            context.stroke()
        }
    }
    
    //
    // context.moveTo(0,0)
    // context.lineTo(450,450)
    // context.stroke()
    var oneStep = function (i, j, me) {
        context.beginPath()
        context.arc(15 + i * 30, 15 + j * 30, 13, 0, 2 * Math.PI)
        context.closePath()
        var gradient = context.createRadialGradient(15 + i * 30 + 2, 15 + j * 30 - 2, 13, 15 + i * 30, 15 + j * 30, 0)
        if (me) {
            gradient.addColorStop(0, '#0A0A0A')
            gradient.addColorStop(1, '#636766')
        } else {
            gradient.addColorStop(0, '#D1D1D1')
            gradient.addColorStop(1, '#F9F9F9')
        }
        context.fillStyle = gradient
        context.fill()
    }
    
    chess.onclick = function (e) {
        if (over) {
            return
        }
        if (!me) {
            return
        }
        var x = e.offsetX
        var y = e.offsetY
        var i = Math.floor(x / 30)
        var j = Math.floor(y / 30)
        if (chessBoard[i][j] === 0) {
            oneStep(i, j, me)
            // if (me) {
            chessBoard[i][j] = 1
    
            // } else {
            //     chessBoard[i][j] = 2
            // }
    
            for (var k = 0; k < count; k++) {
                if (wins[i][j][k]) {
                    myWin[k]++
                    computerWin[k] = 6
                    if (myWin[k] === 5) {
                        window.alert('你赢了')
                        over = true
                    }
                }
            }
            if (!over) {
                me = !me
                computerAI()
    
            }
        }
    
        // oneStep(i,j,me)
    
    }
    var computerAI = function () {
        var myScore = []
        var computerScore = []
        var max = 0
        var u = 0
        var v = 0
        for (var i = 0; i < 15; i++) {
            myScore[i] = []
            computerScore[i] = []
            for (var j = 0; j < 15; j++) {
                myScore[i][j] = 0
                computerScore[i][j] = 0
            }
        }
        for (var i = 0; i < 15; i++) {
            for (var j = 0; j < 15; j++) {
                if (chessBoard[i][j] === 0) {
                    for (var k = 0; k < count; k++) {
                        if (wins[i][j][k]) {
                            if (wins[k] === 1) {
                                myScore[i][j] += 200
                            } else if (myWin[k] === 2) {
                                myScore[i][j] += 400
                            } else if (myWin[k] === 3) {
                                myScore[i][j] += 2000
                            } else if (myWin[k] === 4) {
                                myScore[i][j] += 10000
                            }
    
                            if (computerWin[k] === 1) {
                                computerScore[i][j] += 220
                            } else if (computerWin[k] === 2) {
                                computerScore[i][j] += 420
                            } else if (computerWin[k] === 3) {
                                computerScore[i][j] += 2100
                            } else if (computerWin[k] === 4) {
                                computerScore[i][j] += 20000
                            }
                        }
                    }
                    if (myScore[i][j] > max) {
                        max = myScore[i][j]
                        u = i
                        v = j
                    } else if (myScore[i][j] === max) {
                        if (computerScore[i][j] > computerScore[u][v]) {
                            u = i
                            v = j
                        }
    
                    }
                    if (computerScore[i][j] > max) {
                        max = computerScore[i][j]
                        u = i
                        v = j
                    } else if (computerScore[i][j] > max) {
                        if (computerScore[i][j] > computerScore[u][v]) {
                            u = i
                            v = j
                        }
                    }
                }
            }
        }
        oneStep(u, v, false)
        chessBoard[u][v] = 2
        for (var k = 0; k < count; k++) {
            if (wins[u][v][k]) {
                computerWin[k]++
                myWin[k] = 6
                if (computerWin[k] === 5) {
                    window.alert('AI赢了')
                    over = true
                }
            }
        }
        if (!over) {
            me = !me
            // computerAI()
    
        }
    }


    2回答·1366浏览
  • 慕的地2359295 2017-12-23
    如何实现难易程度的设置

    把不同难度的计算权重分值更改一下,比如简单电脑,专注进攻,不防守,防守分值调低。

    1回答·1515浏览
  • qq_留待天明_0 2017-12-09
    赢法有问题哦 在斜线的情况下

    斜着不能赢,我也是的

    2回答·1296浏览
  • qq_孤岛_12 2017-11-24
    我想在下了第五颗棋子之后再弹出赢了
    已采纳 qq_临摹不凡_0 的回答

    简单,你在alert之前在执行一次画棋子的操作,就是这个drawChessBoard();放在弹出消息前,就Ok了。


    1回答·1427浏览
  • qq_我是我_7 2017-11-09
    有大神将这个人机五子棋改成双人对战,没有AI的,自己弄蒙了,谢谢

    这个不是在加入Ai前的那节课就实现了么。

    5回答·1703浏览
  • 慕粉3170877 2017-10-15
    AI算法中的比较计算机方和我方的分数,求解释。

    同问,看不懂老师所说的。

    2回答·1370浏览
  • qq_一个人的路上_0 2017-09-02
    怎么改进2 2 +1=3的点的权重

    ---

    1回答·1307浏览
数据加载中...
开始学习 免费