那里有源码

来源:2-5 计算机AI实现(2)

该种树啦

2018-03-23 14:03

那里有源码吗 跟老师写的一样 但就是有bug

写回答 关注

1回答

  • qq_牵手蓠祛_0
    2018-03-24 15:38:38
    已采纳

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

    /**

     * 

     */

    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;

    }

    };


    该种树啦

    非常感谢!

    2018-03-26 15:40:02

    共 1 条回复 >

JS实现人机大战之五子棋(AI篇)

"AlphaGO"我要和你下五子棋,教程带你实现五子棋AI

43235 学习 · 109 问题

查看课程

相似问题