本文實(shí)例為大家分享了JS Canvas實(shí)現(xiàn)五子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>五子棋</title> <style type='text/css'> canvas { display: block; margin: 50px auto; box-shadow: -2px -2px 2px #efefef, 5px 5px 5px #b9b9b9; cursor: pointer; } .btn-wrap { display: flex; flex-direction: row; justify-content:center; } .btn-wrap div { margin: 0 10px; } div>span { display: inline-block; padding: 10px 20px; color: #fff; background-color: #EE82EE; border-radius: 5px; cursor: pointer; } div.unable span { background: #D6D6D4; color: #adacaa; } #result-wrap {text-align: center;} </style> </head> <body> <h3 id="result-wrap">--益智五子棋--</h3> <canvas id="chess" width="450px" height="450px"></canvas> <div class="btn-wrap"> <div id='restart' class="restart"> <span>重新開始</span> </div> <div id='goback' class="goback unable"> <span>悔棋</span> </div> <div id='return' class="return unable"> <span>撤銷悔棋</span> </div> </div> <script type="text/javascript" charset="utf-8"> var over = false; var me = true; //我 var _nowi = 0, _nowj = 0; //記錄自己下棋的坐標(biāo) var _compi = 0, _compj = 0; //記錄計(jì)算機(jī)當(dāng)前下棋的坐標(biāo) var _myWin = [], _compWin = []; //記錄我,計(jì)算機(jī)贏的情況 var backAble = false, returnAble = false; var resultTxt = document.getElementById('result-wrap'); var chressBord = [];//棋盤 for(var i = 0; i < 15; i++){ chressBord[i] = []; for(var j = 0; j < 15; j++){ chressBord[i][j] = 0; } } //贏法的統(tǒng)計(jì)數(shù)組 var myWin = []; var computerWin = []; //贏法數(shù)組 var wins = []; for(var i = 0; i < 15; i++){ wins[i] = []; for(var j = 0; j < 15; j++){ wins[i][j] = []; } } var count = 0; //贏法總數(shù) //橫線贏法 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++; } } // debugger; for(var i = 0; i < count; i++){ myWin[i] = 0; _myWin[i] = 0; computerWin[i] = 0; _compWin[i] = 0; } var chess = document.getElementById("chess"); var context = chess.getContext('2d'); context.strokeStyle = '#bfbfbf'; //邊框顏色 var backbtn = document.getElementById("goback"); var returnbtn = document.getElementById("return"); window.onload = function(){ drawChessBoard(); // 畫棋盤 } document.getElementById("restart").onclick = function(){ window.location.reload(); } // 我,下棋 chess.onclick = function(e){ if(over){ return; } if(!me){ return; } // 悔棋功能可用 backbtn.className = backbtn.className.replace( new RegExp( "(//s|^)unable(//s|$)" )," " ); var x = e.offsetX; var y = e.offsetY; var i = Math.floor(x / 30); var j = Math.floor(y / 30); _nowi = i; _nowj = j; if(chressBord[i][j] == 0){ oneStep(i,j,me); chressBord[i][j] = 1; //我,已占位置 for(var k = 0; k < count; k++){ // 將可能贏的情況都加1 if(wins[i][j][k]){ // debugger; myWin[k]++; _compWin[k] = computerWin[k]; computerWin[k] = 6;//這個(gè)位置對方不可能贏了 if(myWin[k] == 5){ // window.alert('你贏了'); resultTxt.innerHTML = '恭喜,你贏了!'; over = true; } } } if(!over){ me = !me; computerAI(); } } } // 悔棋 backbtn.onclick = function(e){ if(!backAble) { return;} over = false; me = true; // resultTxt.innerHTML = 'o(
主站蜘蛛池模板:
九寨沟县|
中西区|
靖宇县|
柘荣县|
乌恰县|
房山区|
伊宁县|
攀枝花市|
沅陵县|
恩施市|
澄江县|
平顶山市|
蒲城县|
鲁甸县|
三穗县|
黔江区|
武宁县|
泽库县|
安陆市|
奉化市|
察哈|
松溪县|
江西省|
郴州市|
托克逊县|
得荣县|
体育|
海伦市|
金坛市|
莱阳市|
宁津县|
清远市|
新竹县|
全椒县|
武汉市|
浠水县|
厦门市|
高唐县|
富民县|
宣城市|
荣昌县|