当前位置:Gxlcms > html代码 > canvas实现五子棋游戏的代码示例

canvas实现五子棋游戏的代码示例

时间:2021-07-01 10:21:17 帮助过:9人阅读

本篇文章给大家带来的内容是关于canvas实现五子棋游戏的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

效果

1756645727-5c61792de7fee_articlex.png

代码

  1. <!DOCTYPE html>
  2. <html lang="zh_CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>五子棋</title>
  6. <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
  7. </head>
  8. <body>
  9. <canvas id="canvas" width="400" height="400"></canvas>
  10. <script>
  11. (function () { // 画布绘制
  12. let canvas = document.getElementById("canvas");
  13. let context = canvas.getContext("2d");
  14. context.beginPath();
  15. for (let i = 0; i < 19; i++) {
  16. // 竖线绘制
  17. context.moveTo(10 + i * 20, 10);
  18. context.lineTo(10 + i * 20, 370);
  19. // 横线绘制
  20. context.moveTo(10, 10 + i * 20);
  21. context.lineTo(370, 10 + i * 20);
  22. }
  23. context.stroke();
  24. })();
  25. // 鼠标单击
  26. let blorwh = 0;
  27. // 定义用于判断落子的二维数组
  28. let matrix = new Array(19);
  29. // 进行赋值
  30. for(let i = 0; i < 19; i++){
  31. matrix[i] = new Array(19);
  32. for(let j = 0; j < 19; j++){
  33. matrix[i][j] = 0;
  34. }
  35. }
  36. $("#canvas").click((event) => {
  37. // 每次落子的时候取反
  38. blorwh = !blorwh;
  39. console.log(event.offsetX);
  40. let canvas = document.getElementById("canvas");
  41. let context = canvas.getContext("2d");
  42. // 保存要落子的坐标
  43. let arcPosX, arcPosY;
  44. // 保存棋子在数组中的位置
  45. let mtxPosX, mtxPosY;
  46. // 和每一条线进行比较,如果相差10个像素以内,即,靠近
  47. for(let x = 0; x < 19; x++){
  48. if(Math.abs(event.offsetX - (10 + x * 20)) < 10){
  49. // 获得需要骡子的x
  50. arcPosX = 10 + x * 20;
  51. mtxPosX = x;
  52. }
  53. if(Math.abs(event.offsetY - (10 + x * 20)) < 10){
  54. // 获得需要的y
  55. arcPosY = 10 + x * 20;
  56. mtxPosY = x;
  57. }
  58. }
  59. // 画出棋子
  60. // 落子为空,进行绘制,反之不绘制
  61. if(matrix[mtxPosX][mtxPosY] == 0) {
  62. context.beginPath();
  63. if (blorwh) {
  64. context.fillStyle = "white";
  65. context.arc(arcPosX, arcPosY, 10, 0, Math.PI * 2, false);
  66. context.stroke();
  67. // 白子为1
  68. matrix[mtxPosX][mtxPosY] = 1;
  69. } else {
  70. context.fillStyle = "black";
  71. context.arc(arcPosX, arcPosY, 10, 0, Math.PI * 2, false);
  72. // 黑子为2
  73. matrix[mtxPosX][mtxPosY] = 2;
  74. }
  75. context.fill();
  76. }
  77. // 获胜检测
  78. if(matrix[mtxPosX - 1][mtxPosY] == matrix[mtxPosX][mtxPosY] &&
  79. matrix[mtxPosX - 2][mtxPosY] == matrix[mtxPosX][mtxPosY] &&
  80. matrix[mtxPosX -3][mtxPosY] == matrix[mtxPosX][mtxPosY] &&
  81. matrix[mtxPosY - 4][mtxPosY] == matrix[mtxPosX][mtxPosY]){
  82. if(matrix[mtxPosX][mtxPosY] == 1){
  83. alert("白方获胜");
  84. }else{
  85. alert("黑方获胜");
  86. }
  87. }
  88. })
  89. </script>
  90. </body>
  91. </html>

思路

创建数组用于保存五子棋的位置即可。
输赢判断使用遍历即可
重复落棋用判断保存的数组的位置是否已经有棋子即可
落在交叉线和附近的点判断,如果相差小于一定数值进行落棋。

以上就是canvas实现五子棋游戏的代码示例的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行