在线看毛片视频-国产免费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>
  • 色香蕉在线观看| 777777av| 国产成人黄色网址| 久草青青在线观看| 日韩在线一级片| 日韩中文字幕三区| 奇米精品一区二区三区| 97在线免费视频观看| 国产在线观看中文字幕| 捷克做爰xxxⅹ性视频| 成人性生交免费看| 欧美精品成人网| 免费黄色特级片| 亚州精品一二三区| 久久精品国产99久久99久久久| 午夜欧美福利视频| 免费成人黄色大片| 老司机av福利| 成人网站免费观看入口| 美女日批免费视频| 成人性做爰aaa片免费看不忠| 国内自拍视频一区| 四虎成人在线播放| 日韩成人手机在线| 亚洲自偷自拍熟女另类| 蜜臀av免费观看| 在线观看污视频| avav在线看| 亚洲图片 自拍偷拍| 欧美a级免费视频| 色综合av综合无码综合网站| 国产精品视频分类| av久久久久久| 欧美伦理视频在线观看| 国产精品一区在线免费观看| 人人妻人人澡人人爽欧美一区双| 六月丁香婷婷在线| 精品国产乱码久久久久久1区二区| 少妇大叫太大太粗太爽了a片小说| www.99热这里只有精品| 欧美一级特黄a| 91黄色在线看| 久久婷五月综合| 日本十八禁视频无遮挡| 亚洲第一天堂久久| 免费国产黄色网址| 三年中文在线观看免费大全中国| www在线观看免费| 玖玖精品在线视频| 制服丝袜综合网| 日本免费不卡一区二区| 艳母动漫在线免费观看| 久草在在线视频| 成人一对一视频| 欧美一级爱爱视频| 天堂网成人在线| 亚洲成人天堂网| 密臀av一区二区三区| 精品中文字幕av| 一二三四视频社区在线| 91精品国产吴梦梦| 日本一二三四区视频| 黑森林福利视频导航| www.爱色av.com| 久久久久久久午夜| 国产av国片精品| 被灌满精子的波多野结衣| 国产精品一二三在线观看| 欧美美女性视频| jizz18女人| 一级淫片在线观看| 三级一区二区三区| 亚洲av无日韩毛片久久| 日韩av片免费观看| 伊人免费视频二| 一道本在线观看视频| 五月天在线免费视频| www.国产亚洲| 我的公把我弄高潮了视频| 国产精品久久国产| 精品视频免费在线播放| av之家在线观看| 中文字幕日本最新乱码视频| 99爱视频在线| 在线观看免费污视频| 日日夜夜精品视频免费观看| 黄黄视频在线观看| 蜜臀av色欲a片无码精品一区| 国产真人做爰毛片视频直播 | 欧美一级视频免费看| 婷婷无套内射影院| 日本激情视频在线| 日本美女久久久| 男女猛烈激情xx00免费视频| 成人一级片网站| 国产又大又长又粗又黄| 欧美视频免费看欧美视频| 免费日韩视频在线观看| 色婷婷激情视频| 国产原创中文在线观看| 污片在线免费看| 久久综合亚洲精品| www.涩涩涩| 欧美国产日韩激情| 久久国产激情视频| 99热在线这里只有精品| 亚洲自拍第三页| av网址在线观看免费| 成人性做爰片免费视频| 日本成人在线免费视频| 黄色a级片免费看| 国产精品嫩草影院8vv8| 国产极品尤物在线| 黄色高清视频网站| 国产wwwxx| 黄色一级视频在线播放| 久国产精品视频| 黄色成人免费看| 国产91对白刺激露脸在线观看| 警花观音坐莲激情销魂小说| 久热精品在线播放| 国产极品美女高潮无套久久久 | 日日摸日日碰夜夜爽av| 妞干网这里只有精品| 性欧美在线视频| 日本免费观看网站| aaa毛片在线观看| 欧美丰满熟妇bbbbbb百度| 精品视频在线观看一区| 欧洲精品在线播放| 4444亚洲人成无码网在线观看| 超碰在线人人爱| 色婷婷综合网站| 久久久久久久久久久久久久久国产| aaaaaa亚洲| 粉嫩虎白女毛片人体| 欧美一级黄色影院| 粉嫩虎白女毛片人体| 久热免费在线观看| wwwwww.色| 岛国av免费在线| 中国黄色片一级| 99精品视频网站| 97在线免费视频观看| 久草视频这里只有精品| 欧美 丝袜 自拍 制服 另类| 欧美日韩一道本| 十八禁视频网站在线观看| 天天爽天天爽夜夜爽| 蜜臀一区二区三区精品免费视频| 91看片在线免费观看| 91热视频在线观看| www成人免费| 韩国一区二区av| 九九热精品国产| 久久这里只有精品18| 日韩精品一区二区三区久久| 538任你躁在线精品免费| 青青草原国产免费| 大西瓜av在线| 久久久久久香蕉| 久久av喷吹av高潮av| 99在线精品免费视频| 婷婷免费在线观看| 免费看欧美黑人毛片| 欧美黄色免费影院| 国产福利片一区二区| 日韩精品 欧美| 国产卡一卡二在线| 国产精品无码av无码| 国产911在线观看| 国模杨依粉嫩蝴蝶150p| 亚洲五月激情网| 久久精品午夜福利| 成人午夜免费剧场| 9久久婷婷国产综合精品性色 | 亚洲精品视频导航| 国产深夜男女无套内射| 久久久精品高清| 91黄色小网站| 青草网在线观看| 色中文字幕在线观看| 色悠悠久久综合网| 欧美精品久久久久久久免费| 国产高潮呻吟久久久| 亚洲欧美国产中文| 国产一区亚洲二区三区| 国产天堂视频在线观看| 国产麻豆电影在线观看| 亚洲图色中文字幕| 性欧美极品xxxx欧美一区二区| 黄色一级片播放| 国产xxxx振车| 肉大捧一出免费观看网站在线播放 | 欧美午夜性视频| 异国色恋浪漫潭| 91社在线播放| 亚洲 欧洲 日韩| 7777在线视频| 黄色一级片av|