在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

微信小程序完成的貪吃蛇游戲【附源碼】

微信小程序完成的貪吃蛇游戲【附源碼】

更新時間:2025-09-27 文章作者:未知 信息來源:網絡 閱讀次數:

微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。
這篇文章主要介紹了微信小程序實現的貪吃蛇游戲,結合實例形式分析了微信小程序實現貪吃蛇游戲功能的相關界面布局與代碼邏輯操作技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下

本文實例講述了微信小程序實現的貪吃蛇游戲。分享給大家供大家參考,具體如下:

先來看看運行效果:

微信小程序實現的貪吃蛇游戲【附源碼】

具體代碼如下:

界面布局 pages/snake/snake/snake.wxml:

<!--snake.wxml-->
<view class="control" bindtouchstart="tapStart" bindtouchmove="tapMove" bindtouchend="tapEnd">
<view class="score">
  <view class="title">snake</view>
  <view class="scoredetail">
    <view class="scoredesc">得分</view>
    <view class="scorenumber">{{score}}</view>
  </view>
  <view class="scoredetail">
    <view class="scoredesc">歷史最高</view>
    <view class="scorenumber">{{maxscore}}</view>
  </view>
</view>
<view class="ground">
  <view wx:for="{{ground}}" class="rows" wx:for-item="cols">
    <view wx:for="{{cols}}" class="block block_{{item}}" >
    </view>
  </view>
</view>
<modal class="modal" hidden="{{modalHidden}}" no-cancel bindconfirm="modalChange">
 <view> 游戲結束,重新開始嗎? </view>
</modal>
</view>

邏輯功能 pages/snake/snake/snake.js:

//snake.js
var app = getApp();
Page({
  data:{
    score: 0,//比分
    maxscore: 0,//最高分
    startx: 0,
    starty: 0,
    endx:0,
    endy:0,//以上四個做方向判斷來用
    ground:[],//存儲操場每個方塊
    rows:28,
    cols:22,//操場大小
    snake:[],//存蛇
    food:[],//存食物
    direction:'',//方向
    modalHidden: true,
    timer:''
  } ,
  onLoad:function(){
    var maxscore = wx.getStorageSync('maxscore');
    if(!maxscore) maxscore = 0
    this.setData({
    maxscore:maxscore
    });
    this.initGround(this.data.rows,this.data.cols);//初始化操場
    this.initSnake(3);//初始化蛇
    this.creatFood();//初始化食物
    this.move();//蛇移動
  },
  //計分器
  storeScore:function(){
   if(this.data.maxscore < this.data.score){
   this.setData({
    maxscore:this.data.score
    })
    wx.setStorageSync('maxscore', this.data.maxscore)
   }
 },
 //操場
  initGround:function(rows,cols){
    for(var i=0;i<rows;i++){
      var arr=[];
      this.data.ground.push(arr);
      for(var j=0;j<cols;j++){
        this.data.ground[i].push(0);
      }
    }
  },
  //蛇
  initSnake:function(len){
    for(var i=0;i<len;i++){
      this.data.ground[0][i]=1;
      this.data.snake.push([0,i]);
    }
  },
  //移動函數
  move:function(){
    var that=this;
    this.data.timer=setInterval(function(){
      that.changeDirection(that.data.direction);
      that.setData({
        ground:that.data.ground
      });
    },400);
  },
  tapStart: function(event){
    this.setData({
      startx: event.touches[0].pageX,
      starty: event.touches[0].pageY
      })
  },
  tapMove: function(event){
    this.setData({
      endx: event.touches[0].pageX,
      endy: event.touches[0].pageY
      })
  },
  tapEnd: function(event){
    var heng = (this.data.endx) ? (this.data.endx - this.data.startx) : 0;
    var shu = (this.data.endy) ? (this.data.endy - this.data.starty) : 0;
    if(Math.abs(heng) > 5 || Math.abs(shu) > 5){
      var direction = (Math.abs(heng) > Math.abs(shu)) ? this.computeDir(1, heng):this.computeDir(0, shu);
      switch(direction){
      case 'left':
        if(this.data.direction=='right')return;
        break;
      case 'right':
        if(this.data.direction=='left')return;
        break;
      case 'top':
        if(this.data.direction=='bottom')return;
        break;
      case 'bottom':
        if(this.data.direction=='top')return;
        break;
      default:
    }
    this.setData({
    startx:0,
    starty:0,
    endx:0,
    endy:0,
    direction:direction
    })
  }
  },
  computeDir: function(heng, num){
  if(heng) return (num > 0) ? 'right' : 'left';
  return (num > 0) ? 'bottom' : 'top';
  },
  creatFood:function(){
    var x=Math.floor(Math.random()*this.data.rows);
    var y=Math.floor(Math.random()*this.data.cols);
    var ground= this.data.ground;
    ground[x][y]=2;
    this.setData({
      ground:ground,
      food:[x,y]
    });
  },
  changeDirection:function(dir){
    switch(dir){
    case 'left':
      return this.changeLeft();
      break;
    case 'right':
      return this.changeRight();
      break;
    case 'top':
      return this.changeTop();
      break;
    case 'bottom':
      return this.changeBottom();
      break;
    default:
    }
  },
  changeLeft:function(){
    var arr=this.data.snake;
    var len=this.data.snake.length;
    var snakeHEAD=arr[len-1][1];
    var snakeTAIL=arr[0];
    var ground=this.data.ground;
    ground[snakeTAIL[0]][snakeTAIL[1]]=0; 
    for(var i=0;i<len-1;i++){
        arr[i]=arr[i+1];  
    };
    var x=arr[len-1][0];
    var y=arr[len-1][1]-1;
    arr[len-1]=[x,y];
      this.checkGame(snakeTAIL);
    for(var i=1;i<len;i++){
      ground[arr[i][0]][arr[i][1]]=1;
    } 
  this.setData({
        ground:ground,
      snake:arr
    });
    return true;
  },
  changeRight:function(){
    var arr=this.data.snake;
    var len=this.data.snake.length;
    var snakeHEAD=arr[len-1][1];
    var snakeTAIL=arr[0];
    var ground=this.data.ground;
    ground[snakeTAIL[0]][snakeTAIL[1]]=0; 
    for(var i=0;i<len-1;i++){
        arr[i]=arr[i+1];  
    };
    var x=arr[len-1][0];
    var y=arr[len-1][1]+1;
    arr[len-1]=[x,y];
    this.checkGame(snakeTAIL);
    for(var i=1;i<len;i++){
      ground[arr[i][0]][arr[i][1]]=1;
    } 
    this.setData({
        ground:ground,
      snake:arr
    });
  //  var y=this.data.snake[0][1];
  //  var x=this.data.snake[0][0];
  //   this.data.ground[x][y]=0;
  //   console.log(this.data.ground[x]);
  //   console.log(this.data.snake);
  //   for(var i=0;i<this.data.snake.length-1;i++){
  //     this.data.snake[i]=this.data.snake[i+1];
  //   }
  //   this.data.snake[this.data.snake.length-1][1]++;
  //   for(var j=1;j<this.data.snake.length;j++){
  //     this.data.ground[this.data.snake[j][0]][this.data.snake[j][1]]=1;
  //   }
    return true;
  },
  changeTop:function(){
    var arr=this.data.snake;
    var len=this.data.snake.length;
    var snakeHEAD=arr[len-1][1];
    var snakeTAIL=arr[0];
    var ground=this.data.ground;
    ground[snakeTAIL[0]][snakeTAIL[1]]=0; 
    for(var i=0;i<len-1;i++){
        arr[i]=arr[i+1];  
    };
    var x=arr[len-1][0]-1;
    var y=arr[len-1][1];
    arr[len-1]=[x,y];
      this.checkGame(snakeTAIL);
    for(var i=1;i<len;i++){
      ground[arr[i][0]][arr[i][1]]=1;
    } 
    this.setData({
      ground:ground,
      snake:arr
    });
    return true;
  },
  changeBottom:function(){
    var arr=this.data.snake;
    var len=this.data.snake.length;
    var snakeHEAD=arr[len-1];
    var snakeTAIL=arr[0];
    var ground=this.data.ground;
    ground[snakeTAIL[0]][snakeTAIL[1]]=0; 
    for(var i=0;i<len-1;i++){
        arr[i]=arr[i+1];  
    };
    var x=arr[len-1][0]+1;
    var y=arr[len-1][1];
    arr[len-1]=[x,y];
    this.checkGame(snakeTAIL);
    for(var i=1;i<len;i++){
      ground[arr[i][0]][arr[i][1]]=1;
    } 
    this.setData({
      ground:ground,
      snake:arr
    });
    return true;
  },
  checkGame:function(snakeTAIL){
    var arr=this.data.snake;
    var len=this.data.snake.length;
    var snakeHEAD=arr[len-1];
    if(snakeHEAD[0]<0||snakeHEAD[0]>=this.data.rows||snakeHEAD[1]>=this.data.cols||snakeHEAD[1]<0){
        clearInterval(this.data.timer);
          this.setData({
          modalHidden: false,
            }) 
    }
    for(var i=0;i<len-1;i++){
      if(arr[i][0]==snakeHEAD[0]&&arr[i][1]==snakeHEAD[1]){
        clearInterval(this.data.timer);
          this.setData({
            modalHidden: false,
          })
      }
    }
    if(snakeHEAD[0]==this.data.food[0]&&snakeHEAD[1]==this.data.food[1]){
      arr.unshift(snakeTAIL);
      this.setData({
        score:this.data.score+10
      });
      this.storeScore();
      this.creatFood();
    }
  },
  modalChange:function(){
  this.setData({
      score: 0,
    ground:[],
    snake:[],
      food:[],
      modalHidden: true,
      direction:''
  })
  this.onLoad();
  }
});

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

微信小程序之多文件下載的簡單封裝

微信小程序如何實現美團菜單

以上就是微信小程序實現的貪吃蛇游戲【附源碼】的詳細內容,更多請關注php中文網其它相關文章!


小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 亚洲黄色小视频在线观看| 国产乱人伦精品一区二区三区| 可以免费看的黄色网址| 午夜免费福利在线| 国产a视频免费观看| 男女日批视频在线观看| av在线免费观看国产| 91精品国产吴梦梦| 久久亚洲a v| 欧美日韩福利在线| 欧美三级一级片| www国产精品内射老熟女| 国产白丝袜美女久久久久| 亚洲熟妇无码av在线播放| 欧美少妇在线观看| 欧美大黑帍在线播放| www.日本三级| 亚洲午夜精品久久久久久人妖| 日本久久久精品视频| 熟女人妇 成熟妇女系列视频| 国产精品人人妻人人爽人人牛| 国产三级三级三级看三级| 亚洲精品成人在线播放| 好吊色这里只有精品| 韩日视频在线观看| 香港三级韩国三级日本三级| 日本男人操女人| 日韩视频在线观看一区二区三区| www.亚洲一区二区| 国产视频九色蝌蚪| 日本免费色视频| 中文字幕人妻熟女人妻洋洋| 国产精品后入内射日本在线观看| 黄色av免费在线播放| 福利网在线观看| aa在线免费观看| 国产无遮挡猛进猛出免费软件| 欧洲金发美女大战黑人| 日本一本二本在线观看| 日韩欧美色视频| 激情六月丁香婷婷| 亚洲小视频在线播放| 成人性生生活性生交12| 欧美日韩激情四射| 在线黄色免费观看| 国产青青在线视频| 亚洲黄色网址在线观看| 无码人妻h动漫| 日本免费a视频| 九九九九九伊人| 黄色一级大片在线观看| www.在线观看av| www.51色.com| 欧美日韩在线观看不卡| 中文字幕无码精品亚洲35| 穿情趣内衣被c到高潮视频| 中文字幕在线观看第三页| 国产原创中文在线观看| 热久久最新地址| 永久免费黄色片| 日韩av在线中文| 538在线视频观看| 免费av观看网址| 欧美一区二区激情| 日韩小视频网站| 国产91沈先生在线播放| 狠狠干视频网站| 成人在线观看毛片| 中文字幕日韩精品无码内射| 欧美少妇一级片| 亚洲色婷婷久久精品av蜜桃| 黄色污污在线观看| 国产精品啪啪啪视频| 久久久久久久久影视| 免费成人深夜夜行网站视频| 男人午夜视频在线观看| 国产成年人在线观看| 欧美 另类 交| 91成人综合网| 欧美 日韩 国产在线观看| 国产午夜大地久久| 黄色av免费在线播放| wwwwwxxxx日本| 日本特黄在线观看| 久久久久久久久久伊人| 欧美 丝袜 自拍 制服 另类| 99视频免费播放| 亚洲三级在线观看视频| 男人天堂新网址| 国产日韩一区二区在线观看| 蜜臀视频一区二区三区| 五月天av影院| 国产视频一视频二| 91精品无人成人www| 性欧美18一19内谢| www.日本在线播放| 国产aaaaa毛片| 日本a级片在线观看| 男女激情无遮挡| 性久久久久久久久久久久久久| 国产又粗又长又爽视频| 色七七在线观看| 欧美日韩午夜爽爽| 国产免费视频传媒| 国产专区在线视频| 精品www久久久久奶水| 欧美日韩午夜爽爽| 五月天av在线播放| 美女日批免费视频| 51xx午夜影福利| 欧美激情第3页| 97在线播放视频| 性一交一乱一伧国产女士spa| 性chinese极品按摩| 久久99久久99精品| 四虎成人在线播放| 色综合手机在线| 久久成人免费观看| av 日韩 人妻 黑人 综合 无码| 国产一级不卡毛片| 欧美不卡在线播放| 永久免费看av| 超碰97在线看| 色中文字幕在线观看| the porn av| 日本精品www| 欧美日韩激情视频在线观看| 大西瓜av在线| 九色自拍视频在线观看| 久久www视频| 国产911在线观看| 欧美性受黑人性爽| 蜜桃网站在线观看| 精品日韩在线播放| 免费极品av一视觉盛宴| 伊人再见免费在线观看高清版| 免费成人黄色大片| 污免费在线观看| 国产成人亚洲综合无码| 青春草国产视频| 国产成人无码精品久久久性色| 丰满爆乳一区二区三区| 久久国产乱子伦免费精品| 欧美视频免费播放| 成人免费xxxxx在线视频| 不卡av免费在线| 日韩一区二区三区不卡视频| 日本一二区免费| 日本一区午夜艳熟免费| 凹凸日日摸日日碰夜夜爽1| 色乱码一区二区三区熟女| 99色这里只有精品| 霍思燕三级露全乳照| www.99在线| 四季av一区二区| 成年网站免费在线观看| wwwwxxxx日韩| 日韩少妇内射免费播放| 免费无码av片在线观看| 手机av在线免费| www.偷拍.com| 国产精品网站免费| 欧美男女交配视频| 免费看欧美一级片| 91看片就是不一样| 久久久一二三四| 成人免费aaa| 三日本三级少妇三级99| 日韩网站在线免费观看| 免费涩涩18网站入口| 日本黄xxxxxxxxx100| 国产福利视频在线播放| www.桃色.com| 免费黄色特级片| 日韩中文在线字幕| 91日韩视频在线观看| 欧美性猛交内射兽交老熟妇| 日日噜噜噜噜久久久精品毛片| 国产高清免费在线| 亚洲狼人综合干| 人人妻人人做人人爽| 色18美女社区| 亚洲狼人综合干| 男人日女人逼逼| 久久福利一区二区| 一道本在线免费视频| 成年人观看网站| 亚洲一区二区三区av无码| 爱豆国产剧免费观看大全剧苏畅| 欧美日韩黄色一级片| 免费的一级黄色片| 最近中文字幕免费mv| 日韩精品视频一二三| aa在线免费观看| heyzo亚洲| 日韩精品一区在线视频| 青青在线视频免费观看| 一级日本黄色片| 欧美精品一区二区性色a+v| 九九热免费在线观看|