本文实例讲述了微信小程序实现的贪吃蛇游戏。分享给大家供大家参考,具体如下:

先来看看运行效果:

具体代码如下:

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

snake

得分

{{score}}

历史最高

{{maxscore}}

游戏结束,重新开始吗?

逻辑功能 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

var arr=[];

this.data.ground.push(arr);

for(var j=0;j

this.data.ground[i].push(0);

}

}

},

//蛇

initSnake:function(len){

for(var i=0;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

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

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

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

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[i]=this.data.snake[i+1];

// }

// this.data.snake[this.data.snake.length-1][1]++;

// for(var j=1;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

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

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

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

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

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();

}

});

附:完整实例源码点击此处本站下载。

希望本文所述对大家微信小程序开发有所帮助。

python小程序贪吃蛇_微信小程序实现的贪吃蛇游戏【附源码下载】相关推荐

  1. python跑酷游戏源码_Phaser.js实现简单的跑酷游戏附源码下载

    采用的物理引擎是Phaser.js 在这里对此引擎不做过多介绍(因为我也是小白,嘿嘿) 效果展示: 源码(详细源码图片资源可点击文章下方或屏幕右上方的github链接进行clone) 1.创建游戏舞台 ...

  2. python练手经典100例微盘_Python练手项目实例汇总(附源码下载)

    1 #_*_ coding:utf-8 _*_ 2 from tkinter import * 3 importrandom4 importtime5 importtkinter.messagebox ...

  3. 视频教程-微信小程序系统教程python版[3/3阶段]_微信小程序支付-手游开发

    微信小程序系统教程python版[3/3阶段]_微信小程序支付 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...

  4. 微信小程序/uni-app 蓝牙打印开发教程和常见问题总结【文末附源码】

    微信小程序/uni-app 蓝牙打印开发教程和常见问题总结[文末附源码] 文章目录 微信小程序/uni-app 蓝牙打印开发教程和常见问题总结[文末附源码] 1️⃣ 写在前面 2️⃣ 蓝牙连接流程 3 ...

  5. python小游戏-16行代码实现3D撞球小游戏!-源码下载

    python小游戏-16行代码实现3D撞球小游戏!-源码下载 所属网站分类: 资源下载 > python小游戏 作者:搞笑 链接: http://www.pythonheidong.com/bl ...

  6. html实现扫雷小游戏(附源码)

    文章目录 实现功能 1.扫雷设计 1.1 主界面 1.2 扫雷难度 1.3 附带功能 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blo ...

  7. 【Python】基金/股票 最大回撤率计算与绘图详解(附源码和数据)

    如果你想找的是求最大回撤的算法,请跳转:[Python] 使用动态规划求解最大回撤详解 [Python]基金/股票 最大回撤率计算与绘图详解(附源码和数据) 0. 起因 1. 大成沪深300指数A 5 ...

  8. 微信小程序Canvas绘制曲线图饼图柱状图雷达图蛛网图实现(附源码)

    小程序绘制曲线图 <view class="container"><canvas canvas-id="lineCanvas" disable ...

  9. 【博主推荐】html好看的拼图小游戏(附源码)

    拼图目录 html好看的拼图小游戏 1.拼图效果示意图 1.1 第一级 九宫格拼图 1.2 第二级 十六宫格拼图 1.3 第三级 三十二宫格拼图 14 第三级 八十一宫格拼图 2.图片切图说明 3.实 ...

  10. 使用Xamarin开发手机聊天程序 -- 基础篇(大量图文讲解 step by step,附源码下载)

    如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin 无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!而且,Xamarin已经被微 ...

最新文章

  1. vector使用排序函数实例
  2. Android -- 带你从源码角度领悟Dagger2入门到放弃(一)
  3. python 随机字符串_python生成随机数、随机字符串
  4. 飞畅科技——视频光端机用光模块的选型详解
  5. 【C语言】找到兼职了心情紧张!
  6. python魔法方法和普通方法_Python魔法方法之属性访问详解!
  7. @程序员,技术债你还清了吗?
  8. CMake 使用总结(转载)
  9. [深度学习项目] - 时间序列预测 (2)
  10. 软件工程复试面试问题总结(二)
  11. 快递物流管理系统(SSM,JQUERY-EASYUI,MYSQL)
  12. BGP比较基础的实验
  13. 【白话理解神经网络中的“损失函数”——最小二乘法和极大似然估计法】
  14. java memcached incr_Redis与Memcached的incr/decr差异对比
  15. IDEA报错:Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found
  16. QMdiSubWindow
  17. ios我的世界java版_我的世界Java版
  18. 字符和字节的区别与分析
  19. 大一_计算机专业_职业生涯规划书(可拷贝在自己空间)
  20. 求给定范围内的所有质数

热门文章

  1. oracle 12c dbca 无法发现 asm diskgroup
  2. 制造-销售”模式正在消亡,传统大型企业的上云之路要如何举步?
  3. Vue 混合、自定义指令、插件
  4. LINUX 软件安装。
  5. 部署Docker前必须问自己的四个问题
  6. 分析ERP上线时可能存在的失误
  7. Scala学习(一):Scala简介与Hello World!
  8. oracle导出dmp的时候使用owner
  9. Ubuntu自定义服务
  10. Effective_STL 学习笔记(二十六) 尽量使用 iterator 代替 const_iterator,reverse_iterator和const_reverse_iterator...