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

基于js+canvas實現五子棋小游戲

基于js+canvas實現五子棋小游戲

本文實例為大家分享了js+canvas實現五子棋小游戲的具體代碼,供大家參考,具體內容如下

效果展示:

基于js+canvas實現五子棋小游戲

源碼展示:

<!DOCTYPE html> <html lang="en"> <head>  <meta charset="UTF-8">  <title>五子棋</title>  <style>  * {  margin: 0;  padding: 0;  }    body {  margin-top: 20px;  margin-left: 20px;  }    canvas {  background-image: url("img/bak.jpg");  border: 1px solid #000;  }    </style> </head> <body> <canvas width="600" height="600" onclick="play(event)"></canvas> <script>  /*準備工作: 1獲取畫布,獲取畫筆對象 */  var mcanvas = document.querySelector("canvas");  var ctx = mcanvas.getContext("2d");    /*準備工作:2創建一個二維數組 用來定義繪制棋盤線*/  var count = 15;//用來定義棋盤的行數和列數  var map = new Array(count);  for (var i = 0; i < map.length; i++) {  map[i] = new Array(count);  for (var j = 0; j < map[i].length; j++) {  map[i][j] = 0;  }  }  /*準備工作:3初始化棋子*/  var black = new Image();  var white = new Image();  black.src = "img/black.png";  white.src = "img/white.png";      //開始繪制 1繪制棋盤線  ctx.strokeStyle = "#fff";  var rectWH = 40; //設置繪制矩形的大小  for (var i = 0; i < map.length; i++) {  for (var j = 0; j < map[i].length; j++) {  ctx.strokeRect(j * rectWH, i * rectWH, rectWH, rectWH);  }  }    // 用來進行黑白子的切換  var isBlack = true;    //開始繪制 2下子  function play(e) {  //獲取點擊canvas的位置值默認,canvas的左上角為(0,0) 點  var leftOffset = 20;//body 的margin  var x = e.clientX - leftOffset;  var y = e.clientY - leftOffset;  // console.log(x+" "+y);  // 設置點擊點后棋子下在哪里,獲取點擊的位置進行判斷如果超過格子的一半則繪制到下一個點如果小于 則繪制在上一個點上  var xv = (x - rectWH / 2) / rectWH;  var yv = (y - rectWH / 2) / rectWH;    var col = parseInt(xv) + 1;  var row = parseInt(yv) + 1;  console.log(xv + " " + yv + " , " + col + " " + row);    //嚴格點需要驗證 ,驗證所輸入的點是否在數組中已經存在 ,如果存在 則返回  if (map[row][col] != 0) {  alert("咋的,還想往我身上下啊!瞎啊!沒看見已經有棋子了!!!");  return;  }    // 切換繪制黑白子  if (isBlack) {  ctx.drawImage(black, col * 40 - 20, row * 40 - 20);  isBlack = false;  map[row][col] = 1;  Yes(1, row, col);  } else {  ctx.drawImage(white, col * 40 - 20, row * 40 - 20);  isBlack = true;  map[row][col] = 2;  Yes(2, row, col);  }  }    //算法驗證,查看誰贏 tag :1 :黑子 2 :白子  function Yes(t, row, col) {  console.log(1);  var orgrow = row;  var orgcol = col;  var total = 1;  // 判斷依據,以當前下的棋子為圓心,水平方向左右尋找和自己想通的值 ,最后判斷如果大于5個則表示勝利  // 1水平方向判斷  while (col - 1 > 0 && map[row][col - 1] == t) { //判斷下一個值 注意一定是:col-1  total++;  col--;  }  row = orgrow;  col = orgcol;  while (col + 1 < 15 && map[row][col + 1] == t) {  col++;  total++;  }  if (total >= 5) {  if (t == 1){  alert("黑子贏");  } else{  alert("白子贏");  }  return;//判斷出輸贏結束后續判斷  }    // 2垂直方向判斷  row = orgrow;  col = orgcol;  total = 1;  while (row - 1 > 0 && map[row - 1][col] == t) {  row--;  total++;  }  row = orgrow;  col = orgcol;  while (row + 1 < 15 && map[row + 1][col] == t) {  row++;  total++;  }  if (total >= 5) {  if (t == 1){  alert("黑子贏");  } else{  alert("白子贏");  }  return;//判斷出輸贏結束后續判斷  }    //左下 右上  row = orgrow;  col = orgcol;  total = 1;  while (row + 1 < 15 && col - 1 > 0 && map[row + 1][col - 1] == t) {  row++;  col--;  total++;  }  row = orgrow;  col = orgcol;  while (row - 1 > 0 && col + 1 < 15 && map[row - 1][col + 1] == t) {  row--;  col++;  total++;  }  if (total >= 5) {  if (t == 1){  alert("黑子贏");  } else{  alert("白子贏");  }  return;//判斷出輸贏結束后續判斷  }  //左上右下  row = orgrow;  col = orgcol;  total = 1;  while (row - 1 > 0 && col - 1 > 0 && map[row - 1][col - 1] == t) {  row--;  col--;  total++;  }  row = orgrow;  col = orgcol;  while (row + 1 < 15 && col + 1 < 15 && map[row + 1][col + 1] == t) {  row++;  col++;  total++;  }  if (total >= 5) {  if (t == 1){  alert("黑子贏");  } else{  alert("白子贏");  }  return;//判斷出輸贏結束后續判斷  }  }      /*功能擴充:  1當勝利后 彈框:a是否在來一局 b 精彩回復  a 如果點擊在來一句 清空數據重新開始  b 精彩回放將棋盤黑白子按照下棋的順序進行棋子編號2悔棋功能  3對算法的擴充  a如果是雙三 則直接彈出勝利  b若是桶四 則直接彈出勝利  */ </script> </body> </html>

圖片資源:

基于js+canvas實現五子棋小游戲

背景圖片:

基于js+canvas實現五子棋小游戲基于js+canvas實現五子棋小游戲

相關學習推薦:javascript視頻教程

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
国产成人精品综合久久久久| 四虎精品影库4HUTV四虎| 国产麻豆精品原创| 亚洲综合国产精品| 国产午夜精品一区理论片飘花 | 正在播放国产精品每日更新 | www.午夜精品| 日韩一区二区免费视频| 国产在热线精品视频国产一二| 精品日产一卡2卡三卡4卡自拍| 国产精品合集一区二区三区| 91精品久久久久久久99蜜桃| 久久久这里有精品999| 久久91精品国产91久久户| 中文字幕在线亚洲精品| 99久久精品影院老鸭窝| 国产午夜福利精品久久| 精品人妻少妇嫩草AV无码专区 | 精品无码av一区二区三区| 久久精品免视看国产成人| 国产精品亚洲成在人线| 自拍偷自拍亚洲精品情侣| 综合人妻久久一区二区精品| 成人午夜精品无码区久久| 中文国产成人精品久久app| 久久精品国产99久久丝袜| 国产系列高清精品第一页 | 亚洲精品456人成在线| 精品久久久无码21p发布| 亚洲精品午夜久久久伊人| 亚洲精品成人网站在线播放| 亚洲精品美女在线观看| 亚洲欧洲日本精品| 日本中文字幕在线精品| 无码国产精品一区二区免费式直播| 国产精品久久久久aaaa| 97久久精品无码一区二区天美| 无码人妻精品一区二区三区99性| 亚洲国产精品无码第一区二区三区| 无码日本精品XXXXXXXXX| 精品国产自在现线看|