Javascript和HTML5 利用canvas构建 Web五子棋游戏程序设计
admin
2023-06-11 20:01:42
0次

 HTML5 利用canvas构建 Web五子棋游戏程序设计

  这只是一个简单的javascript和HTML5小程序,没有实现人机对战。   五子棋棋盘落子点对应的二维数组。数组的元素对应落子点。比如数组元素值为0表示该元素对应的落子点没有棋子,数组元素值为1表示该元素对应的落子点有白棋子,数组元素值为2表示该元素对应的落子点有黑棋子;    判断五子棋赢棋的算法是通过对五子棋棋盘落子点对应的二维数组的操作来实现的。        判断五子棋赢棋算法   下边的函数可以实现判断五子棋赢棋的算法,也可以按照教材中相应的算法实现。   其中函数的参数xx.yy为数组下标,chess数组实现五子棋棋盘落子点的数据结构映射。   算法的思想方法是:以当前落子点对应的下标为基点,向其周围8个方向进行搜索,如果有同色子连五子,返回1,或2,否则返回0。返回1代表白棋方胜,返回2代表黑棋方胜。返回0代表没有发生赢棋数据结构状态。       提供程序用到的棋子  

Javascript和HTML5 利用canvas构建 Web五子棋游戏程序设计

Javascript和HTML5 利用canvas构建 Web五子棋游戏程序设计

 

Javascript和HTML5 利用canvas构建 Web五子棋游戏程序设计

 

  1. > 
  2. <html xmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  5.     <title>title> 
  6.     <style type="text/css"> 
  7.         body { 
  8.             margin: 10px; 
  9.         } 
  10.     style> 
  11.     <script type="text/javascript"> 
  12.         var canvas; 
  13.         var context; 
  14.         var isWhite = true;//设置是否该轮到白棋 
  15.         var isWell = false;//设置该局棋盘是否赢了,如果赢了就不能再走了 
  16.         var img_b = new Image(); 
  17.         img_b.src = "p_w_picpaths/b.png";//白棋图片 
  18.         var img_w = new Image(); 
  19.         img_w.src = "p_w_picpaths/w.png";//黑棋图片 
  20.   
  21.         var chessData = new Array(15);//这个为棋盘的二维数组用来保存棋盘信息,初始化0为没有走过的,1为白棋走的,2为黑棋走的 
  22.         for (var x = 0; x < 15; x++) { 
  23.             chessData[x] = new Array(15); 
  24.             for (var y = 0; y < 15; y++) { 
  25.                 chessData[x][y] = 0; 
  26.             } 
  27.         } 
  28.   
  29.         function drawRect() {//页面加载完毕调用函数,初始化棋盘 
  30.             canvas = document.getElementById("canvas"); 
  31.             context = canvas.getContext("2d"); 
  32.   
  33.             for (var i = 0; i <= 640; i += 40) {//绘制棋盘的线 
  34.                 context.beginPath(); 
  35.                 context.moveTo(0, i); 
  36.                 context.lineTo(640, i); 
  37.                 context.closePath(); 
  38.                 context.stroke(); 
  39.   
  40.                 context.beginPath(); 
  41.                 context.moveTo(i, 0); 
  42.                 context.lineTo(i, 640); 
  43.                 context.closePath(); 
  44.                 context.stroke(); 
  45.             } 
  46.         } 
  47.         function play(e) {//鼠标点击时发生 
  48.             var x = parseInt((e.clientX - 20) / 40);//计算鼠标点击的区域,如果点击了(65,65),那么就是点击了(1,1)的位置 
  49.             var y = parseInt((e.clientY - 20) / 40); 
  50.   
  51.             if (chessData[x][y] != 0) {//判断该位置是否被下过了 
  52.                 alert("你不能在这个位置下棋"); 
  53.                 return; 
  54.             } 
  55.   
  56.             if (isWhite) { 
  57.                 isWhite = false; 
  58.                 drawChess(1, x, y); 
  59.             } 
  60.             else { 
  61.                 isWhite = true; 
  62.                 drawChess(2, x, y); 
  63.             } 
  64.   
  65.         } 
  66.         function drawChess(chess, x, y) {//参数为,棋(1为白棋,2为黑棋),数组位置 
  67.             if (isWell == true) { 
  68.                 alert("已经结束了,如果需要重新玩,请刷新"); 
  69.                 return; 
  70.             } 
  71.             if (x >= 0 && x < 15 && y >= 0 && y < 15) { 
  72.                 if (chess == 1) { 
  73.                     context.drawImage(img_w, x * 40 + 20, y * 40 + 20);//绘制白棋 
  74.                     chessData[x][y] = 1; 
  75.                 } 
  76.                 else { 
  77.                     context.drawImage(img_b, x * 40 + 20, y * 40 + 20); 
  78.                     chessData[x][y] = 2; 
  79.                 } 
  80.                 judge(x, y, chess); 
  81.             } 
  82.         } 
  83.         function judge(x, y, chess) {//判断该局棋盘是否赢了 
  84.             var count1 = 0; 
  85.             var count2 = 0; 
  86.             var count3 = 0; 
  87.             var count4 = 0; 
  88.   
  89.             //左右判断 
  90.             for (var i = x; i >= 0; i--) { 
  91.                 if (chessData[i][y] != chess) { 
  92.                     break; 
  93.                 } 
  94.                 count1++; 
  95.             } 
  96.             for (var i = x + 1; i < 15; i++) { 
  97.                 if (chessData[i][y] != chess) { 
  98.                     break; 
  99.                 } 
  100.                 count1++; 
  101.             } 
  102.             //上下判断 
  103.             for (var i = y; i >= 0; i--) { 
  104.                 if (chessData[x][i] != chess) { 
  105.                     break; 
  106.                 } 
  107.                 count2++; 
  108.             } 
  109.             for (var i = y + 1; i < 15; i++) { 
  110.                 if (chessData[x][i] != chess) { 
  111.                     break; 
  112.                 } 
  113.                 count2++; 
  114.             } 
  115.             //左上右下判断 
  116.             for (var i = x, j = y; i >= 0, j >= 0; i--, j--) { 
  117.                 if (chessData[i][j] != chess) { 
  118.                     break; 
  119.                 } 
  120.                 count3++; 
  121.             } 
  122.             for (var i = x + 1, j = y + 1; i < 15, j < 15; i++, j++) { 
  123.                 if (chessData[i][j] != chess) { 
  124.                     break; 
  125.                 } 
  126.                 count3++; 
  127.             } 
  128.             //右上左下判断 
  129.             for (var i = x, j = y; i >= 0, j < 15; i--, j++) { 
  130.                 if (chessData[i][j] != chess) { 
  131.                     break; 
  132.                 } 
  133.                 count4++; 
  134.             } 
  135.             for (var i = x + 1, j = y - 1; i < 15, j >= 0; i++, j--) { 
  136.                 if (chessData[i][j] != chess) { 
  137.                     break; 
  138.                 } 
  139.                 count4++; 
  140.             } 
  141.   
  142.             if (count1 >= 5 || count2 >= 5 || count3 >= 5 || count4 >= 5) { 
  143.                 if (chess == 1) { 
  144.                     alert("白棋赢了"); 
  145.                 } 
  146.                 else { 
  147.                     alert("黑棋赢了"); 
  148.                 } 
  149.                 isWell = true;//设置该局棋盘已经赢了,不可以再走了 
  150.             } 
  151.         } 
  152.     script> 
  153. head> 
  154. <body onload="drawRect()"> 
  155.     <div> 
  156.         <canvas width="640" id="canvas" onmousedown="play(event)" height="640">你的浏览器不支持HTML5 canvas  ,请使用 google chrome 浏览器 打开. 
  157.         canvas> 
  158.     div> 
  159.   
  160. body> 
  161. html> 

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...