国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

原生JS+Canvas實現五子棋游戲

來源:懂視網 責編:小OO 時間:2020-11-27 22:33:01
文檔

原生JS+Canvas實現五子棋游戲

本文實例為大家分享了JSCanvas實現五子棋游戲的具體代碼,供大家參考,具體內容如下:<。';over = true;}}}if(。over){me =。me;computerAI();}}}// 悔棋backbtn.onclick = function(e){if(。';over = true;}}}if(。over){me =。me;}backAble = true;returnAble = false;var hasClass = new RegExp('unable').test(' ' + returnbtn.className + ' ');if(
推薦度:
導讀本文實例為大家分享了JSCanvas實現五子棋游戲的具體代碼,供大家參考,具體內容如下:<。';over = true;}}}if(。over){me =。me;computerAI();}}}// 悔棋backbtn.onclick = function(e){if(。';over = true;}}}if(。over){me =。me;}backAble = true;returnAble = false;var hasClass = new RegExp('unable').test(' ' + returnbtn.className + ' ');if(

本文實例為大家分享了JS  Canvas實現五子棋游戲的具體代碼,供大家參考,具體內容如下

<!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; //記錄自己下棋的坐標 
 var _compi = 0, _compj = 0; //記錄計算機當前下棋的坐標 
 var _myWin = [], _compWin = []; //記錄我,計算機贏的情況 
 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; 
 } 
 } 
 //贏法的統計數組 
 var myWin = []; 
 var computerWin = []; 
 //贏法數組 
 var wins = []; 
 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++; 
 } 
 } 
 // 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;//這個位置對方不可能贏了 
 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(╯□╰)o,悔棋中'; 
 // 撤銷悔棋功能可用 
 returnbtn.className = returnbtn.className.replace( new RegExp( "(\\s|^)unable(\\s|$)" )," " ); 
 // 我,悔棋 
 chressBord[_nowi][_nowj] = 0; //我,已占位置 還原 
 minusStep(_nowi, _nowj); //銷毀棋子 
 for(var k = 0; k < count; k++){ // 將可能贏的情況都減1 
 if(wins[_nowi][_nowj][k]){ 
 myWin[k]--; 
 computerWin[k] = _compWin[k];//這個位置對方可能贏 
 } 
 } 
 // 計算機相應的悔棋 
 chressBord[_compi][_compj] = 0; //計算機,已占位置 還原 
 minusStep(_compi, _compj); //銷毀棋子 
 for(var k = 0; k < count; k++){ // 將可能贏的情況都減1 
 if(wins[_compi][_compj][k]){ 
 computerWin[k]--; 
 myWin[k] = _myWin[i];//這個位置對方可能贏 
 } 
 } 
 resultTxt.innerHTML = '--益智五子棋--'; 
 returnAble = true; 
 backAble = false; 
 } 
 // 撤銷悔棋 
 returnbtn.onclick = function(e){ 
 if(!returnAble) { return; } 
 // 我,撤銷悔棋 
 chressBord[_nowi][_nowj] = 1; //我,已占位置 
 oneStep(_nowi,_nowj,me); 
 for(var k = 0; k < count; k++){ 
 if(wins[_nowi][_nowj][k]){ 
 myWin[k]++; 
 _compWin[k] = computerWin[k]; 
 computerWin[k] = 6;//這個位置對方不可能贏 
 } 
 if(myWin[k] == 5){ 
 resultTxt.innerHTML = '恭喜,你贏了!'; 
 over = true; 
 } 
 } 
 // 計算機撤銷相應的悔棋 
 chressBord[_compi][_compj] = 2; //計算機,已占位置 
 oneStep(_compi,_compj,false); 
 for(var k = 0; k < count; k++){ // 將可能贏的情況都減1 
 if(wins[_compi][_compj][k]){ 
 computerWin[k]++; 
 _myWin[k] = myWin[k]; 
 myWin[k] = 6;//這個位置對方不可能贏 
 } 
 if(computerWin[k] == 5){ 
 resultTxt.innerHTML = 'o(╯□╰)o,計算機贏了,繼續加油哦!'; 
 over = true; 
 } 
 } 
 returnbtn.className += ' '+ 'unable'; 
 returnAble = false; 
 backAble = true; 
 } 
 // 計算機下棋 
 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(chressBord[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; 
 } 
 } 
 
 } 
 } 
 } 
 _compi = u; 
 _compj = v; 
 oneStep(u,v,false); 
 chressBord[u][v] = 2; //計算機占據位置 
 for(var k = 0; k < count; k++){ 
 if(wins[u][v][k]){ 
 computerWin[k]++; 
 _myWin[k] = myWin[k]; 
 myWin[k] = 6;//這個位置對方不可能贏了 
 if(computerWin[k] == 5){ 
 resultTxt.innerHTML = 'o(╯□╰)o,計算機贏了,繼續加油哦!'; 
 over = true; 
 } 
 } 
 } 
 if(!over){ 
 me = !me; 
 } 
 backAble = true; 
 returnAble = false; 
 var hasClass = new RegExp('unable').test(' ' + returnbtn.className + ' '); 
 if(!hasClass) { 
 returnbtn.className += ' ' + 'unable'; 
 } 
 } 
 //繪畫棋盤 
 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 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 + 2, 15 + j * 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(); 
 } 
 //銷毀棋子 
 var minusStep = function(i,j) { 
 //擦除該圓 
 context.clearRect((i) * 30, (j) * 30, 30, 30); 
 // 重畫該圓周圍的格子 
 context.beginPath(); 
 context.moveTo(15+i*30 , j*30); 
 context.lineTo(15+i*30 , j*30 + 30); 
 context.moveTo(i*30, j*30+15); 
 context.lineTo((i+1)*30 , j*30+15); 
 
 context.stroke(); 
 } 
 </script> 
 </body> 
</html>

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

原生JS+Canvas實現五子棋游戲

本文實例為大家分享了JSCanvas實現五子棋游戲的具體代碼,供大家參考,具體內容如下:<。';over = true;}}}if(。over){me =。me;computerAI();}}}// 悔棋backbtn.onclick = function(e){if(。';over = true;}}}if(。over){me =。me;}backAble = true;returnAble = false;var hasClass = new RegExp('unable').test(' ' + returnbtn.className + ' ');if(
推薦度:
標簽: 原生
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 91啪国自产在线高清观看 | 全黄网站| 日韩国产欧美在线观看 | 国产靠逼视频 | 国产 日韩欧美 | 欧美亚洲综合在线观看 | 国产高清视频在线观看 | 国产成人精品日本亚洲语音1 | 视频在线一区 | 欧美精品v日韩精品v国产精品 | 精品国产一区二区三区久久久狼 | 日韩精品欧美亚洲高清有无 | 国产精品久久亚洲一区二区 | 国产精品第 | a欧美在线 | 亚洲高清在线观看 | 久久精品无遮挡一级毛片 | 国产又黄又a又潮娇喘视频 国产淫视频 | 欧美在线一区二区三区不卡 | 国产一区二区三区欧美 | 亚洲视频在线观看网站 | 美日韩中文字幕 | 国产成人高清亚洲一区91 | 精品在线免费播放 | 久久99国产精一区二区三区 | 久久久91精品国产一区二区 | 欧美曰韩| 国内一区亚洲综合图区欧美 | 国产在视频 | 在线亚洲欧美日韩 | 国产三级在线免费 | 在线观看国产亚洲 | 久久久久久亚洲精品不卡 | 亚洲一区二区三区四 | 欧美操| 欧美中文日韩 | 免费中国女人69xxxxx视频 | 亚洲 欧美 国产另类首页 | 国产亚洲欧美日韩俺去了 | 国产成人一区二区三区 | 亚洲免费在线 |