中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解基于JavaScript如何實現五子棋游戲

發布時間:2020-07-21 15:57:45 來源:億速云 閱讀:131 作者:小豬 欄目:web開發

小編這次要給大家分享的是詳解基于JavaScript如何實現五子棋游戲,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

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

思路:

1、先用canvas畫五子棋的棋盤
2、獲取鼠標點擊的位置
3、根據鼠標點擊的位置判斷,并畫棋子
4、根據下的棋子判斷是否贏了

代碼:

<!DOCTYPE html> 
<html> 
<head lang="en"> 
 <meta charset="UTF-8"> 
 <title></title> 
 <style> 
 * { 
 padding: 0; 
 margin: 0; 
 } 
 canvas { 
 margin: 10px; 
 border: 2px solid #000; 
 } 
 #box { 
 display: inline-block; 
 position: absolute; 
 margin-top: 200px; 
 margin-left: 100px; 
 } 
 span { 
 font: 24px "微軟雅黑"; 
 display: inline-block; 
 height: 50px; 
 } 
 input { 
 margin-top: 30px; 
 display: block; 
 width: 100px; 
 height: 50px; 
 font: 16px "微軟雅黑"; 
 color: #fff; 
 background-color: #0099cc; 
 } 
 </style> 
</head> 
<body> 
<canvas width="640" height="640" id="cas"> 
 您的瀏覽器不支持canvas,請升級到最新的瀏覽器 
</canvas> 
<div id="box"> 
 <span id="txt"></span> 
 <input type="button" id="btn" value="重新開始"/> 
 
</div> 
 
<script> 
 var flag = true; //true代表白棋下的棋子,false代表黑棋下的棋子 
 var isWin = false; //判斷是否結束,true結束,false沒有結束 
 var step = 40; //設置每個格子的寬高都是40 
 
 var txt = document.getElementById("txt"); 
 var btn = document.getElementById("btn"); 
 var cas = document.getElementById("cas");// 獲取畫布對象 
 var ctx = cas.getContext("2d"); //畫布上下文 
 
// 創建圖片對象 
 var img_b = new Image(); 
 img_b.src = "imgs/b.png";//設置黑棋圖片路徑 
 var img_w = new Image(); 
 img_w.src = "imgs/w.png";//設置白棋圖片路徑 
 
// 用二維數組來保存棋盤,0代表沒有走過,1為白棋走過,2為黑棋走過 
 var arr = new Array(15); //聲明一個一維數組 
 for (var i = 0; i < 15; i++) { 
 arr[i] = new Array(15); //每個值再聲明一個一維數組,這樣就組成了一個二維數組 
 for (var j = 0; j < 15; j++) { 
 arr[i][j] = 0; 
 } 
 } 
 
 //繪制棋盤 
 function drawLine() { 
 for (var i = 0; i < cas.width / step; i++) { 
 // 畫豎線 
 ctx.moveTo((i + 1) * step, 0); 
 ctx.lineTo((i + 1) * step, cas.height); 
 // 畫橫線 
 ctx.moveTo(0, (i + 1) * step); 
 ctx.lineTo(cas.width, (i + 1) * step); 
 ctx.stroke(); 
 } 
 } 
 //獲取鼠標點擊的位置 
 cas.onclick = function (e) { 
 // 先判斷游戲是否結束 
 if (isWin) { 
 alert("游戲已經結束,請刷新重新開始!"); 
 return 0; 
 } 
 //判斷棋子顯示的地方,四條邊上不顯示棋子, 
 //鼠標點擊的位置減去邊框距離頁面的上和左的距離(10),減去一個格子寬高的一半(20) 
 var x = (e.clientX - 10 - 20) / 40; 
 var y = (e.clientY - 10 - 20) / 40; 
 
 //進行取整來確定棋子最終顯示的區域 
 x = parseInt(x); 
 y = parseInt(y); 
 //如果超出棋盤或者在棋盤邊界直接返回,邊界上不能畫棋子 
 if(x < 0 || x >= 15 || y < 0 || y >= 15) { 
 return; 
 } 
 //進行判斷該位置是否已經顯示過棋子 
 if (arr[x][y] != 0) { 
 alert("你不能在這個位置下棋"); 
 return; 
 } 
 // 判斷是顯示黑子還是白子 
 if (flag) {//白子 
 flag = false; //將標志置為false,表示下次為黑子 
 drawChess(1, x, y); //調用函數來畫棋子 
 
 } else {//黑子 
 flag = true; //將標志置為true,表示下次為白子 
 drawChess(2, x, y); //調用函數來畫棋子 
 
 } 
 } 
 //畫棋子 
 function drawChess(num, x, y) { 
 //根據x和y確定圖片顯示位置,讓圖片顯示在十字線中間,因為一個格子為40,圖片大小為30,所以40-30/2等于25,所以需要加上25 
 var x0 = x * step + 25; 
 var y0 = y * step + 25; 
 if (num == 1) { 
 //繪制白棋 
 ctx.drawImage(img_w, x0, y0); 
 arr[x][y] = 1; //白子 
 } else if (num == 2) { 
 // 繪制黑棋 
 ctx.drawImage(img_b, x0, y0); 
 arr[x][y] = 2; //黑子 
 } 
 //調用函數判斷輸贏 
 judge(num, x, y); 
 } 
 //判斷輸贏 
 function judge(num, x, y) { 
 var n1 = 0, //左右方向 
 n2 = 0, //上下方向 
 n3 = 0, //左上到右下方向 
 n4 = 0; // 右上到左下方向 
 //***************左右方向*************
 //先從點擊的位置向左尋找,相同顏色的棋子n1自加,直到不是相同顏色的棋子,則跳出循環 
 for (var i = x; i >= 0; i--) { 
 if (arr[i][y] != num) { 
 break; 
 } 
 n1++; 
 } 
 //然后從點擊的位置向右下一個位置尋找,相同顏色的棋子n1自加,直到不是相同顏色的棋子,則跳出循環 
 for (var i = x + 1; i < 15; i++) { 
 if (arr[i][y] != num) { 
 break; 
 } 
 n1++; 
 } 
 //****************上下方向************ 
 for (var i = y; i >= 0; i--) { 
 if (arr[x][i] != num) { 
 break; 
 } 
 n2++; 
 } 
 for (var i = y + 1; i < 15; i++) { 
 if (arr[x][i] != num) { 
 break; 
 } 
 n2++; 
 } 
 //****************左上到右下斜方向*********** 
 for(var i = x, j = y; i >=0, j >= 0; i--, j--) { 
 if (i < 0 || j < 0 || arr[i][j] != num) { 
 break; 
 } 
 n3++; 
 } 
 for(var i = x+1, j = y+1; i < 15, j < 15; i++, j++) { 
 if (i >= 15 || j >= 15 || arr[i][j] != num) { 
 break; 
 } 
 n3++; 
 } 
 //****************右上到左下斜方向*************
 for(var i = x, j = y; i >= 0, j < 15; i--, j++) { 
 if (i < 0 || j >= 15 || arr[i][j] != num) { 
 break; 
 } 
 n4++; 
 } 
 for(var i = x+1, j = y-1; i < 15, j >= 0; i++, j--) { 
 if (i >= 15 || j < 0 || arr[i][j] != num) { 
 break; 
 } 
 n4++; 
 } 
 //用一個定時器來延時,否則會先彈出對話框,然后才顯示棋子 
 var str; 
 if (n1 >= 5 || n2 >= 5 || n3 >= 5 || n4 >= 5) { 
 if (num == 1) {//白棋 
 str = "白棋贏了,游戲結束!" 
 } else if (num == 2) {//黑棋 
 str = "黑棋贏了,游戲結束!" 
 } 
 txt.innerHTML = str; 
 isWin = true; 
 } 
 } 
 //重新開始 
 btn.onclick = function() { 
 flag = true; 
 isWin = false; 
 
 for (var i = 0; i < 15; i++) { 
 for (var j = 0; j < 15; j++) { 
 arr[i][j] = 0; 
 } 
 } 
 ctx.clearRect(0, 0, 640, 640); 
 txt.innerHTML = ""; 
 drawLine(); 
 } 
 drawLine(); 
</script> 
</body> 
</html> 

看完這篇關于詳解基于JavaScript如何實現五子棋游戲的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳信县| 阳谷县| 博白县| 渑池县| 特克斯县| 安新县| 扬中市| 新巴尔虎右旗| 广汉市| 治县。| 镇宁| 郸城县| 安新县| 宁都县| 台湾省| 资中县| 会泽县| 阜城县| 罗田县| 金沙县| 甘肃省| 兴业县| 大理市| 酒泉市| 林芝县| 青海省| 三穗县| 洱源县| 封开县| 丰都县| 郧西县| 依兰县| 观塘区| 广州市| 阜南县| 大兴区| 竹北市| 虞城县| 沧源| 瑞丽市| 巴林右旗|