Html5版贪吃蛇游戏制作(经典玩法)

news/2024/11/21 1:44:16/

回味经典小游戏,用Html5做了个贪吃蛇的小游戏,完成了核心经典玩法的功能。

游戏可以通过电脑的键盘“方向键”控制,也可以点击屏幕中的按钮进行控制。(支持移动端哈)

点击这里试玩

蛇的移动是在18 x 18的格子中进行移动,每次移动都会移动一小格,速度可以进行调整加难。

实现功能

  1. 制作了游戏的场景。
  2. 小蛇的控制及移动。
  3. 吃到目标后,蛇会变长。
  4. 目标点随机出现。
  5. 碰到屏幕边缘、蛇身后Game Over。

移动太慢的话,可以修改下蛇的移动速度哈

源码地址: pro.youyu001.com

用到技术

  1. 使用逐帧动画制作了蛇头的动画效果。
  2. 使用数组记录了蛇的位置数据。
  3. 通过数组判断蛇不可以移动的位置,进行游戏逻辑的判断。
  4. 加入和键盘对游戏的控制。
  5. 使用了面向对象方式处理了蛇、食物等物品的逻辑。

代码说明

1、游戏区域的创建,18 x 18大小的空间用来进行移动

var mapsize = {x:18,y:18};//地图比例 18X18
var maparr = [];//地图方块数组
var bg = new PIXI.Sprite.fromImage("res/snake/di.jpg");
app.stage.addChild(bg);
for(var i=0;i<mapsize.x;i++){for(var j=0;j<mapsize.y;j++){var box = new PIXI.Sprite.fromImage("res/snake/kuai.png");box.anchor.set(0.5,0.5);box.x = 45+j*30;box.y = 45+i*30;app.stage.addChild(box);}
}

2、通过对象封装方式定义了蛇的对象中的属性和方法逻辑。(具体实现可以看源码哈)

function Snake(x, y){//蛇对象var self = this;this.view = new PIXI.extras.AnimatedSprite.fromImages(snakeurl);this.view.rotation = Math.PI/180*270;this.view.anchor.set(0.5,0.5);this.view.x = x;this.view.y = y;app.stage.addChild(this.view);this.snakebodyarr = [self];//蛇全身部件数组var snakebodyarrsize = 3;//初始蛇身长3个单位self.last_direction = "right";//最后一次蛇头移动方向self.next_time_direction = "right";//下次的移动方向var food = null;this.Move_Method = function(){//蛇头移动方法}this.add_Parts = function(url,rotation){//增加蛇身体}function add_Parts(url,x,y,rotation,father){//初始化蛇身体+尾巴}function BodyMove_Method(){//蛇身体移动方法}function bodyrotation(direction){//蛇头旋转替换下节蛇身纹理}function next_food(x,y){//检查与食物的碰撞}function naxt_snakehand(x,y){//检查蛇头位置}function next_step(x,y){//检查下次移动位置情况}this.addFood = function(snakeheadx,snakeheady){//生成食物}this.interference_check = function(x,y,skx,sky){//检查碰撞}this.remove = function(){//移除蛇和食物}
}

3、通过帧频计算蛇的移动速度

定义1个变量,用于记录移动时间相关

var speedtime = 30;//记录小蛇移动的间隔帧数

在帧频函数中,执行下面代码。每0.5秒小蛇移动一次

//小蛇定时移动
speedtime--;
if(speedtime == 0) {snake.Move_Method();//小蛇移动speedtime = 30-Math.round(snake.snakebodyarr.length*0.1);
}

4、通过键盘事件控制移动方向

当鼠标点击方向键时改变小蛇移动方向变量

function keyDown(event){//键盘监听var event = event || window.event;switch (event.keyCode){case 37:if(snake.last_direction=="right") {return;}snake.next_time_direction = "left";break;case 39:if(snake.last_direction=="left") {return;}snake.next_time_direction = "right"; break;case 38:if(snake.last_direction=="down") {return;}snake.next_time_direction = "up";break;case 40:if(snake.last_direction=="up") {return;}snake.next_time_direction = "down";break;}return false;
}

5、游戏失败验证

检测下次是否能顺利移动

function next_step(x,y){//检查下次移动位置情况for(var i=1;i<self.snakebodyarr.length;i++){var snake = self.snakebodyarr[i];if(x==snake.view.x&&y==snake.view.y){app.stage.addChild(self.view);addgameout();}}
}

游戏结束事件

function gameend(){//游戏结束界面if(snake.snakebodyarr.length!=324){return false;}app.ticker.remove(zp);left.view.interactive = false;right.view.interactive = false;up.view.interactive = false;down.view.interactive = false;snake.view.stop();var gameover = new PIXI.Sprite.fromImage("res/map/gameover.png");gameover.x = 198;gameover.y = 320;app.stage.addChild(gameover);gameover.interactive = true;gameover.on("pointertap",gameoverclick);function gameoverclick(){//游戏结束的点击事件app.stage.removeChild(gameover);add playgame();snake.remove();}return true;
}

游戏还有很多待完善的地方,可以追加很多新的功能,比如:穿墙,加个boss啥的哈...


http://www.ppmy.cn/news/54039.html

相关文章

mybatisplus封装方法

分页 public AjaxResult getBlindBoxInfo(RequestParam(name“pageNo”, defaultValue“1”) Integer pageNo, RequestParam(name“pageSize”, defaultValue“10”) Integer pageSize) { String userId AuthUtil.getAppUserId(); if(StringUtils.isEmpty(userId)){ return A…

基于springboot和ajax的简单项目 013 ztree插件使用,这是关于修改和新增的

先写写的是menu_list.html文件上的内容。 01.在自动加载函数上写点击事件 $(".input-group-btn").on("click",".btn-delete",doDeleteObject).on("click",".btn-add,.btn-update",doLoadEditUI);02.登录函数&#xff1a; …

大模型竞逐,再造AI新格局

作者 | 辰纹 来源 | 洞见新研社 “面对AI时代&#xff0c;所有产品都值得用大模型重做一次。” 这是阿里巴巴集团董事会主席兼CEO、阿里云智能集团CEO张勇在2023阿里云峰会上对AIGC&#xff08;生成式AI&#xff09;进化的判断&#xff0c;在这背后则是由ChatGPT为起始点&…

现场工程师救火-UEFI(BIOS)节能设置导致金牌服务器只跑出龟速

近期协助出现场&#xff0c;解决了一个非常典型的UEFI 启动参数配置不当导致的服务器降效案例。错误的节能参数配置&#xff0c;导致价值几十万的服务器变成龟速服务器&#xff0c;并造成严重的生产事故。 1. 现象 朋友公司近期准备升级2010年就部署的服务器组&#xff0c;新…

【C语言】实战练习

目录 1.计算体积&#xff1a; 2、根据父母身高计算孩子的理论身高&#xff1a; 3、三十六计的几计&#xff1a; 4、文本输出&#xff1a; 5、粮仓计数&#xff1a;​编辑 6、auto 7、static: 8、模拟用户注册系统&#xff1a; 1.计算体积&#xff1a; #include <std…

iPhone清理工具:4Easysoft iPhone Cleaner for Mac

4Easysoft iPhone Cleaner for Mac是一款Mac上的iPhone清理软件&#xff0c;它可以帮助用户清理iPhone上的垃圾文件、缓存文件、无用图片和视频等&#xff0c;从而释放iPhone的存储空间&#xff0c;提高设备的性能。全面扫描您的 iOS 设备并对不必要的数据进行分类。轻松删除 i…

商城订单模块实战 - 数据库设计、ABA问题处理、读写分离分库分表

引言 订单系统可以说是整个电商系统中最重要的一个子系统&#xff0c;因此订单数据可以算作电商企业最重要的数据资产。这篇文章我们来看看在我们的商城系统中订单服务是如何实现的&#xff0c;特别是在设计和实现一个订单系统的过程中有哪些问题是需要特别考虑的。 业务分析…

为什么有时候磁珠会使电源的纹波变大

电路设计时&#xff0c;我们常常在芯片电源的输入放一个磁珠和电容&#xff0c;用以滤除电源上的高频噪声。 但是有时候会发现&#xff0c;加了磁珠后&#xff0c;芯片电源输入处纹波竟然变大了&#xff0c;超出了电源纹波范围&#xff0c;导致芯片工作异常。 把磁珠换成0R电阻…