站長資訊網
最全最豐富的資訊網站

canvas實現五子棋游戲的代碼示例

本篇文章給大家帶來的內容是關于canvas實現五子棋游戲的代碼示例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

效果

canvas實現五子棋游戲的代碼示例

代碼

<!DOCTYPE html> <html lang="zh_CN"> <head>     <meta charset="UTF-8">     <title>五子棋</title>     <script src="https://code.jquery.com/jquery-3.3.1.js"></script> </head> <body> <canvas id="canvas" width="400" height="400"></canvas> <script>     (function () {    // 畫布繪制         let canvas = document.getElementById("canvas");         let context = canvas.getContext("2d");         context.beginPath();         for (let i = 0; i < 19; i++) {             // 豎線繪制             context.moveTo(10 + i * 20, 10);             context.lineTo(10 + i * 20, 370);             // 橫線繪制             context.moveTo(10, 10 + i * 20);             context.lineTo(370, 10 + i * 20);         }         context.stroke();     })();     // 鼠標單擊     let blorwh = 0;     // 定義用于判斷落子的二維數組     let matrix = new Array(19);     // 進行賦值     for(let i = 0; i < 19; i++){         matrix[i] = new Array(19);         for(let j = 0; j < 19; j++){             matrix[i][j] = 0;         }     }     $("#canvas").click((event) => {         // 每次落子的時候取反         blorwh = !blorwh;         console.log(event.offsetX);         let canvas = document.getElementById("canvas");         let context = canvas.getContext("2d");         // 保存要落子的坐標         let arcPosX, arcPosY;         // 保存棋子在數組中的位置         let mtxPosX, mtxPosY;         // 和每一條線進行比較,如果相差10個像素以內,即,靠近         for(let x = 0; x < 19; x++){             if(Math.abs(event.offsetX - (10 + x * 20)) < 10){                 // 獲得需要騾子的x                 arcPosX = 10 + x * 20;                 mtxPosX = x;             }             if(Math.abs(event.offsetY - (10 + x * 20)) < 10){                 // 獲得需要的y                 arcPosY = 10 + x * 20;                 mtxPosY = x;             }         }         // 畫出棋子         // 落子為空,進行繪制,反之不繪制         if(matrix[mtxPosX][mtxPosY] == 0) {             context.beginPath();             if (blorwh) {                 context.fillStyle = "white";                 context.arc(arcPosX, arcPosY, 10, 0, Math.PI * 2, false);                 context.stroke();                 // 白子為1                 matrix[mtxPosX][mtxPosY] = 1;             } else {                 context.fillStyle = "black";                 context.arc(arcPosX, arcPosY, 10, 0, Math.PI * 2, false);                 // 黑子為2                 matrix[mtxPosX][mtxPosY] = 2;             }             context.fill();         }         // 獲勝檢測         if(matrix[mtxPosX - 1][mtxPosY] == matrix[mtxPosX][mtxPosY] &&             matrix[mtxPosX - 2][mtxPosY] == matrix[mtxPosX][mtxPosY]  &&                 matrix[mtxPosX -3][mtxPosY] == matrix[mtxPosX][mtxPosY]  &&                     matrix[mtxPosY - 4][mtxPosY] == matrix[mtxPosX][mtxPosY]){             if(matrix[mtxPosX][mtxPosY] == 1){                 alert("白方獲勝");             }else{                 alert("黑方獲勝");             }         }     }) </script> </body> </html>

思路

創建數組用于保存五子棋的位置即可。
輸贏判斷使用遍歷即可
重復落棋用判斷保存的數組的位置是否已經有棋子即可
落在交叉線和附近的點判斷,如果相差小于一定數值進行落棋。

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
国产在线精品一区二区不卡| 精品一区二区无码AV| 亚洲av永久中文无码精品 | 免费精品无码AV片在线观看| 精品久久久久久亚洲| 亚洲综合精品网站在线观看| 亚洲av日韩aⅴ无码色老头| 国产SUV精品一区二区88L| 精品国产一区二区三区在线| 亚洲日韩精品无码专区加勒比| 亚洲国产福利精品一区二区 | 国产91精品久久久久久| 精品久久精品久久| 久久久久久久久无码精品亚洲日韩| 日韩中文字幕精品免费一区| 亚洲美女精品视频| 91精品国产自产在线观看永久∴| 久久亚洲AV午夜福利精品一区| 久久国产乱子精品免费女| 中文字幕在线亚洲精品| 国产午夜亚洲精品理论片不卡 | 久久亚洲精品中文字幕| 久久夜色精品国产尤物| 国产精品拍天天在线| 国产精品日本一区二区在线播放| 久久99国产精品久久99| 国产精品香港三级国产AV| 国精品无码一区二区三区在线| 国产精品亚洲片在线| 精品综合久久久久久97超人| 国产精品无码一区二区三级| 国产亚洲精品国产| 亚洲国产精品久久久天堂| 久久久无码精品亚洲日韩蜜桃| 久久久久国产精品免费网站| 午夜精品美女写真福利| 久久久无码精品亚洲日韩按摩| 久久精品国产亚洲av影院| 亚洲国产精品久久人人爱| 国产成人精品视频在放| 亚洲精品456人成在线|