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 = xj = 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 = xj = 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> 

相关内容

热门资讯

华为公布半导体领域重大突破 5月25日,2026国际电路与系统研讨会在上海举行,华为公司董事、半导体业务部总裁何庭波在题为《半导...
全焦段4K实况照片+8000m... 一、前言:全能无短板!荣耀600 Pro闪亮登场 现如今的中高端手机市场,可以说是卷得五花八门。大家...
强烈信号,家长们现在要连夜排队... 北京家长凌晨3点排队,只为孩子能上个中职学校。5月10日这天,是北京昌平职业技术学校自主招生面试日:...
自主选课+实战赋能,北京地铁公... 5月25日,据北京地铁公司消息,为精准破解员工岗位实训短板、满足个性化成长需求,近期北京地铁公司优化...
荣耀600 Pro测评:“销量... 荣耀的数字系列是一款典型的“销量大于网上声量”的产品。 在过去这些年,荣耀的数字系列一直都是3000...
美团、腾讯参投!机器人公司天机... 图片来源:广东天机智能系统有限官网 5月25日,天机机器人公众号发布消息称,广东天机智能系统有限公司...
伊朗外交部:中国在推动停火谈判... 伊朗外交部发言人巴加埃25日在伊朗首都德黑兰召开的记者会上谈及地区局势时表示,中国在推动地区停火与谈...
谷歌对“AI投毒”重拳出击 文 | 字母AI 当你某天一觉醒来,发现自己被困在布满屏幕的房间里,每个屏幕中播放的不是你感兴趣的...
斥资约5亿元!中国前首富钟睒睒... 快科技5月25日消息,当固态电池被视为动力电池的“终极路线”,中国前首富悄悄入局。 近日,农夫山泉创...
浑南智造闪耀“东北超”开幕式 ... 近日,备受瞩目的“东北超”开幕式震撼启幕。来自浑南区的新松机器人自动化股份有限公司携工业机器人SR2...