亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序五子棋游戲的棋盤,重置,對弈實現方法【附demo源碼下載】

2020-03-21 16:01:37
字體:
來源:轉載
供稿:網友

本文實例講述了微信小程序五子棋游戲的棋盤,重置,對弈實現方法。分享給大家供大家參考,具體如下:

DEMO下載

五子棋對弈、悔棋DEMO

效果圖

微信小程序,五子棋,游戲,源碼下載

分析

1. 采用微信小程序的canvas制作五子棋;
2. 確定棋盤大小及格數;
3. 繪制棋盤—-通過棋盤寬高和格數計算間距,同時保存坐標點;
4. 黑方和白方下子—-定義一個布爾變量代表各自的身份;
5. 重置棋盤—-重新開始;
6. 通過判斷當前棋手,悔棋時進行改變。

繪制棋盤

drawLine(arr){ arr.forEach(current => {  this.ctx.setFillStyle(this.lineColor);  this.ctx.beginPath();  this.ctx.lineWidth = 1;  this.ctx.moveTo(current[0].x, current[0].y);  for (var i = 1; i < current.length; i++) {  this.ctx.lineTo(current[i].x, current[i].y);  }  this.ctx.stroke();  this.ctx.closePath();  this.ctx.draw(true); }); } drawChessboard(){ // 每個格子的寬高 var everyLen = this.everyLen; // 標記坐標的個數 var count = 0; // 從縱向保存坐標 var arrY = []; // 雙循環計算每個坐標的橫縱坐標 for(var i = 0;i <= this.type; i++){  var arr = [],arr0 = [];  for(var j = 0;j <= this.type; j++){  count++;  arr.push({   y: this.margin + i * everyLen,   x: this.margin + j * everyLen,   pointX: j,   pointY: i,   index: count  });  arr0.push({   x: this.margin + i * everyLen,   y: this.margin + j * everyLen  })  }  // 清空canvas  this.ctx.clearRect(0, 0, this.width, this.height);  // 保存橫線坐標和豎線坐標  this.everyPoint.push(arr);  arrY.push(arr0); } // 繪制橫向線 this.drawLine(this.everyPoint); // 繪制豎向線 this.drawLine(arrY); }

繪制當前點擊坐標的棋子

// 獲取當前點擊位置的坐標 getPosition(e){ return {  x: e.touches[0].x,  y: e.touches[0].y }; } // 將當前坐標和棋盤坐標數組對比,找到精確坐標 checkPoint(arr,po){ for (var i = 0; i < this.everyPoint.length; i++){  for (var j = 0; j < this.everyPoint[i].length; j++){  if (Math.abs(this.everyPoint[i][j].x - po.x) < this.everyLen/2 && Math.abs(this.everyPoint[i][j].y - po.y) < this.everyLen/2){   // 將棋盤精確坐標保存到當前持棋方數組   arr.push(this.everyPoint[i][j]);   // 同時刪除棋盤坐標數組的該值,表示當前位置已經存在棋子   this.everyPoint[i].splice(j,1);   break;  }  } } } // 繪制當前坐標棋子 drawCle(opts,color){ this.ctx.setFillStyle(color); this.ctx.beginPath(); this.ctx.arc(opts.x, opts.y, this.r, 0, Math.PI * 2, true); this.ctx.closePath(); this.ctx.fill(); this.ctx.draw(true); } drawLastPoint(type){ // 判斷是黑方持棋還是白方持棋,進行繪制棋子 if(type == 'AI'){  this.AIPoint.forEach((current, index) => {  this.drawCle(current, '#000000');  }); }else{  this.myPoint.forEach((current, index) => {  this.drawCle(current, '#ffffff');  }); } } this.page.changeTouchStart = function (e) {  // 判斷游戲是否開始  if (self.START_GAME){  // 獲取當前坐標  var newPo = self.getPosition(e);  // 獲取棋盤精確坐標  if (!self.boolAI && self.boolMy) {   self.checkPoint(self.myPoint, newPo);  } else if (self.boolAI && !self.boolMy) {   self.checkPoint(self.AIPoint, newPo);  }  } } this.page.changeTouchEnd = function (e) {  if (self.START_GAME) {  // 繪制棋子  if (!self.boolAI && self.boolMy) {   self.boolAI = !self.boolAI;   self.boolMy = !self.boolMy;   self.drawLastPoint('PO');   // 判斷白棋是否五子勝利   if (self.myPoint.length >= 5 && self.checkWinner(self.myPoint)){   wx.showToast({title: '白棋勝利!'});   self.START_GAME = false;   }  } else if (self.boolAI && !self.boolMy) {   self.boolAI = !self.boolAI;   self.boolMy = !self.boolMy;   self.drawLastPoint('AI');   // 判斷黑棋是否五子勝利   if(self.AIPoint.length >= 5 && self.checkWinner(self.AIPoint)){   wx.showToast({ title: '黑棋勝利!' });   self.START_GAME = false;   }  }  } }

五子棋勝利方判斷

五子棋勝利就是橫向、縱向、45度斜線方向、135度斜線方向連成五個顏色相同的棋子,為了更加清楚的表示,我將四個方向的判斷做四個函數處理。

checkTransverse(arr,po){//橫向檢查 var len = arr.length - 1; var count = 1; // 東 for(var i = 1; i < this.CHESS_LEN ; i++){  for (var j = 0; j < len; j++){  if(arr[j].pointX == po.pointX - i && arr[j].pointY == po.pointY){   count++;  }  } } if (count == this.CHESS_LEN) { return true;} // 西 for (var i = 1; i < this.CHESS_LEN; i++) {  for (var j = 0; j < len; j++) {  if (arr[j].pointX == po.pointX + i && arr[j].pointY == po.pointY) {   count++;  }  } } if (count == this.CHESS_LEN) { return true; } } checkPortrait(arr,po){//縱向檢查 var len = arr.length - 1; var count = 1; // 南 for (var i = 1; i < this.CHESS_LEN; i++) {  for (var j = 0; j < len; j++) {  if (arr[j].pointX == po.pointX && arr[j].pointY == po.pointY - i) {   count++;  }  } } if (count == this.CHESS_LEN) { return true; } // 北 for (var i = 1; i < this.CHESS_LEN; i++) {  for (var j = 0; j < len; j++) {  if (arr[j].pointX == po.pointX && arr[j].pointY == po.pointY + i) {   count++;  }  } } if (count == this.CHESS_LEN) { return true; } } checkNortheast(arr,po){//45度 var len = arr.length - 1; var count = 1; // 西南 for (var i = 1; i < this.CHESS_LEN; i++) {  for (var j = 0; j < len; j++) {  if (arr[j].pointX == po.pointX - i && arr[j].pointY == po.pointY - i) {   count++;  }  } } if (count == this.CHESS_LEN) { return true; } // 東北 for (var i = 1; i < this.CHESS_LEN; i++) {  for (var j = 0; j < len; j++) {  if (arr[j].pointX == po.pointX + i && arr[j].pointY == po.pointY + i) {   count++;  }  } } if (count == this.CHESS_LEN) { return true; } } checkNorthwest(arr,po){//135度 var len = arr.length - 1; var count = 1; // 西北 for (var i = 1; i < this.CHESS_LEN; i++) {  for (var j = 0; j < len; j++) {  if (arr[j].pointX == po.pointX - i && arr[j].pointY == po.pointY + i) {   count++;  }  } } if (count == this.CHESS_LEN) { return true; } // 東南 for (var i = 1; i < this.CHESS_LEN; i++) {  for (var j = 0; j < len; j++) {  if (arr[j].pointX == po.pointX + i && arr[j].pointY == po.pointY - i) {   count++;  }  } } if (count == this.CHESS_LEN) { return true; } } checkWinner(arr){ var currentPo = arr[arr.length - 1]; var win1 = this.checkTransverse(arr, currentPo); var win2 = this.checkPortrait(arr, currentPo); var win3 = this.checkNortheast(arr, currentPo); var win4 = this.checkNorthwest(arr, currentPo); if (win1 || win2 || win3 || win4){  return true; }else{  return false; } }

重置棋盤

resetChessBoard(){ this.page.setData({ isHide: false }); this.init();}this.page.changeReset = function(e){ self.resetChessBoard();}

注意

1. 繪制棋盤前必須清空canvas,方便最后的重新開始和重置棋盤;
2. 對當前棋子的坐標四個方向的判斷,采用的原始坐標而不是計算后的繪制坐標;
3. 在判斷持棋人時,各自采用一個值,方便添加悔棋功能。

只是實現了簡單的對下五子棋功能,后續添加悔棋、記分、記時等功能!

同時向判斷勝利的函數可以合并為一進行優化!

希望本文所述對大家微信小程序開發有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产视频自拍一区| 日韩欧美国产激情| 久久久人成影片一区二区三区观看| 国产一区二区在线免费| 国产亚洲欧洲黄色| 亚洲深夜福利在线| 国产日韩中文字幕| 亚洲色图第一页| 久久精品亚洲精品| 国产精品久久久久91| 午夜精品视频在线| 久久久久久这里只有精品| 成人综合国产精品| 在线视频国产日韩| 亚洲桃花岛网站| 丁香五六月婷婷久久激情| 欧美精品在线视频观看| 2021国产精品视频| 精品视频偷偷看在线观看| 亚洲激情小视频| 久久精品国产2020观看福利| 欧美刺激性大交免费视频| 北条麻妃在线一区二区| 国产一区二区三区直播精品电影| 中文.日本.精品| 欧美性高潮在线| 日韩在线观看免费全| 国产在线播放不卡| 欧美大尺度在线观看| 日韩精品中文字幕久久臀| 国产精品美女久久久久av超清| 亚洲护士老师的毛茸茸最新章节| 久久69精品久久久久久国产越南| 国产精品日韩在线| 91精品视频免费| 日韩高清有码在线| 自拍偷拍亚洲在线| 久久久久五月天| 亚洲va久久久噜噜噜久久天堂| 日韩最新av在线| yellow中文字幕久久| 国产视频在线观看一区二区| 97精品一区二区视频在线观看| 亚洲天堂第一页| 欧美性xxxxx极品娇小| 日韩成人av一区| 精品亚洲一区二区三区| 国产精品免费视频xxxx| 高清欧美性猛交xxxx黑人猛交| 色狠狠久久aa北条麻妃| 色偷偷噜噜噜亚洲男人的天堂| 精品亚洲国产成av人片传媒| 国产精品久久网| 亚洲国产天堂久久国产91| 国产精品久久99久久| 日韩精品免费电影| 91免费精品视频| 久久久久久中文字幕| 欧美激情女人20p| 久久久久久亚洲| 欧美黑人性生活视频| 国产精品久久久久久久久借妻| 亚洲国产99精品国自产| 亚洲字幕一区二区| 久色乳综合思思在线视频| 97精品久久久中文字幕免费| 欧美孕妇孕交黑巨大网站| 国产精品欧美激情| 国产极品精品在线观看| 黄色一区二区在线| 一区二区日韩精品| 欧美专区在线视频| 国产精品久久久久久久av电影| 国产精品国产三级国产aⅴ浪潮| 国产一区二区美女视频| 国产99久久精品一区二区 夜夜躁日日躁| 久久久精品美女| 亚洲精品成a人在线观看| 久久97久久97精品免视看| 精品亚洲国产成av人片传媒| 亚洲国产精品成人精品| 69影院欧美专区视频| 欧美性生交大片免费| 欧美日韩成人精品| 国产日韩精品电影| 欧美激情视频在线观看| 国产精品99蜜臀久久不卡二区| 久久综合电影一区| 日韩精品极品在线观看播放免费视频| 欧美精品在线免费播放| 成人女保姆的销魂服务| 91精品久久久久久久久青青| 国产精品高潮粉嫩av| 亚洲精品videossex少妇| 日韩电影中文字幕一区| 亚洲欧美在线免费| 久久精视频免费在线久久完整在线看| 国产91成人video| 精品日本美女福利在线观看| 亚洲a∨日韩av高清在线观看| 精品久久久久久久久国产字幕| 国产一区二区免费| 97在线日本国产| 国产精品视频自拍| 色中色综合影院手机版在线观看| 国产欧美一区二区三区久久人妖| 久久激情视频久久| 亚洲精品国产精品国自产在线| 欧美精品精品精品精品免费| 在线视频精品一| 亚洲第一网站免费视频| 久久久免费电影| 日av在线播放中文不卡| 精品国产自在精品国产浪潮| 久久久亚洲精品视频| 久久久久久久久国产| 中文字幕精品一区二区精品| 亚洲精品99久久久久| 欧美日韩免费在线| 久久69精品久久久久久久电影好| 久久97精品久久久久久久不卡| 欧美成人激情视频免费观看| 欧美有码在线视频| 国产精品视频免费观看www| 日韩在线视频线视频免费网站| 在线电影欧美日韩一区二区私密| 国产精品美女久久久免费| 日韩av在线免播放器| 久久久中文字幕| 亚洲久久久久久久久久| 中文字幕精品av| 国产女精品视频网站免费| 亚洲精品一区二区在线| 在线观看国产欧美| 一本色道久久88精品综合| 色一区av在线| 亚洲视屏在线播放| 欧美壮男野外gaytube| 欧美成人午夜剧场免费观看| 97成人精品视频在线观看| 久久久久久久久国产精品| 精品色蜜蜜精品视频在线观看| 亚洲福利视频网| 欧美一级电影免费在线观看| 欧美日韩亚洲一区二| 日韩成人在线电影网| 中文字幕九色91在线| 亚洲电影在线看| 欧美性猛交xxxx偷拍洗澡| 在线视频日本亚洲性| 亚洲精品有码在线| 成人精品福利视频| 日韩视频免费在线| www.久久撸.com| 在线视频免费一区二区| 国产视频亚洲精品| 欧美电影院免费观看| 亚洲欧美日韩精品久久奇米色影视| 日韩精品在线视频观看| 69视频在线播放| 欧美人在线观看| 国产一区二区三区免费视频| 亚洲精品v欧美精品v日韩精品| 亚洲天堂av高清|