您好,登錄后才能下訂單哦!
小編這次要給大家分享的是詳解基于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如何實現五子棋游戲的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。