时间:2021-05-26
本文实例为大家分享了js实现五子棋游戏的具体代码,供大家参考,具体内容如下
html
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title>五子棋</title> <link rel="stylesheet" href="css/style.css" /> </head> <body> <canvas id="chess" width="450px" height="450px"></canvas> <script type="text/javascript" src="js/script.js" ></script> </body></html>css
canvas{ display: block; margin: 50px auto; box-shadow: -2px -2px 2px #EFEFEF,5px 5px 5px #B9B9B9;}js
var me = true;var over = false;var chessBox = [];var wins = []; //定义三维数组//赢法统计数组var myWin = [];var computerWin = [];for(i=0;i<15;i++){ chessBox[i]=[]; for(j=0;j<15;j++){ chessBox[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++){ //执行1次 // 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; //执行2次 // wins[0][1][1]=true; // wins[0][2][1]=true; // wins[0][3][1]=true; // wins[0][4][1]=true; // wins[0][5][1]=true; 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++; }} 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 = "img/木头.jpg";logo.onload = function(){ context.drawImage(logo,0,0,450,450); drawChessBoard();// oneStep(0,0,true);// oneStep(1,1,false);}function drawChessBoard(){ for(var i=0;i<15;i++){ context.moveTo(15+i*30,15); context.lineTo(15+i*30,435); context.moveTo(15,15+i*30); context.lineTo(435,15+i*30); 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,15+j*30,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); //i,j为索引序列号 var j = Math.floor(y/30); if(chessBox[i][j]==0){ oneStep(i,j,me); chessBox[i][j]=1; 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(); } } }var computerAI = function(){ var myScore = []; var computerScore = []; var max = 0; //保存最高分数; var u = 0, 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(chessBox[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]+= 2020; }else if(computerWin[k]==4){ computerScore[i][j]+= 10020; } } } 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; } } } } } oneStep(u,v,false); chessBox[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("计算机赢了"); over = true; } } } if(!over){ me=!me; }}更多有趣的经典小游戏实现专题,分享给大家:
C++经典小游戏汇总
python经典小游戏汇总
python俄罗斯方块游戏集合
JavaScript经典游戏 玩不停
javascript经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了js实现AI五子棋人机大战的具体代码,供大家参考,具体内容如下实现原理就是计算五子棋所有赢的种类,利用canvas实现五子棋排版落子。五子棋
本文实例为大家分享了js实现五子棋游戏的具体代码,供大家参考,具体内容如下html:五子棋游戏hahacss:*{margin:0;padding:0;}bod
本文实例为大家分享了js+canvas实现五子棋小游戏的具体代码,供大家参考,具体内容如下效果展示:源码展示:五子棋*{margin:0;padding:0;}
控制台实现五子棋游戏,供大家参考,具体内容如下控制台打印棋盘编写两人对弈的五子棋游戏,游戏规则:黑白双方有一方首先实现五子连续,则获胜,游戏结束。代码:impo
本文实例为大家分享了JSCanvas实现五子棋游戏的具体代码,供大家参考,具体内容如下五子棋canvas{display:block;margin:50pxau