位置: IT常识 - 正文

HTML实现简单的贪吃蛇小游戏(附完整源码)(html怎么做)

编辑:rootadmin
HTML实现简单的贪吃蛇小游戏(附完整源码)  基于HTML5技术的贪吃蛇小游戏的设计与实现项目简介:

推荐整理分享HTML实现简单的贪吃蛇小游戏(附完整源码)(html怎么做),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:html语言简单,html怎么设计,简易html,html简单制作,简易html,html简单例子,用html,html简单例子,内容如对您有帮助,希望把文章链接给更多的朋友!

        贪吃蛇作为我们儿时经典的游戏之一,它是一款单机而又好玩的小游戏。今天,就让我们用html5技术实现一个简单的贪吃蛇小游戏!

项目核心技术:

        html5的canvas+JS技术

操作步骤:

        游戏玩家通过操作键盘的方向键(上下左右键)来控制小蛇的方向,使小蛇吃到红色的食物,然后促使小蛇长大。并且,如果得到的分数在不断上涨,游戏的难度也会不断的上升(小蛇的移动速度会越来越快)。如果小蛇头部撞到墙壁或小蛇自己的身体,就会判定游戏失败。

实现效果图:(不会动态图,将就着看!)HTML实现简单的贪吃蛇小游戏(附完整源码)(html怎么做)

复制以下全部代码,可直接查看效果!!!实现代码如下:

本项目代码一共分为两个部分:HTML+JS两部分。具体代码如下:

HTML代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><html><head><meta charset="utf-8"><title>html5贪吃蛇小游戏</title><script type="text/javascript" src="贪吃蛇.js"></script><script></script></head><body><h1>html5贪吃蛇小游戏</h1><div align="left" class="a">游戏规则:<br>1.初始分数为=0、初始速度为1!<br>2.操作蛇移动,使蛇可以吃到红色的食物!<br>3.每当我的分数每次达到100分时,当前速度就会提高一个等级!<br>4.最高速度为10.相信能力强的人可以达到最高速度!<br>5.当蛇的碰到墙体或者自己的身子的时候,会宣布游戏失败!<br></div><style>body{text-align: center;background-color: aqua;}#snake{margin-top: 20px;}.a{margin-top: 50px;margin-left: 680px;width: 600px;font-size: 20px;}</style><canvas id="snake" width="" height=""></canvas><h3 id="score">我的得分:0</h3><h3 id="speed">当前速度:1</h3><script>var snake = new Snake("snake","score","speed",36,36);snake.init();</script></body>js代码:var Snake = function(ele,scoreele,speedele,x,y){this.cellWidth = 15;//格子的大小this.ele = document.getElementById(ele);this.cxt = this.ele.getContext("2d");this.x=x;this.y=y;this.scoreele = document.getElementById(scoreele);this.speedele = document.getElementById(speedele);//生成canvas大小。边框。this.ele.width = this.cellWidth * this.x;this.ele.height = this.cellWidth * this.y;this.ele.style.border ="2px solid #000";this.changeDiretion();//绑定方向事件。}Snake.prototype = {init:function(){//初始化,重置。恢复js数据以及dom。this.direction = 1;//向右 2下 3左 4 上this.nextDirection = '';this.snakeArr = [[0,parseInt(this.y/2)],[1,parseInt(this.y/2)]];this.speed = 1;this.score = 0;this.cxt.fillStyle ='#fff';this.cxt.fillRect(0,0,this.cellWidth*this.x,this.cellWidth*this.y);this.scoreele.innerHTML="我的得分:0";this.speedele.innerHTML="当前速度:1";this.createCoolPoint();this.drawCell(this.coolPoint,2);this.drawSnake();this.setTimer();},getCellArea:function(pos){//返回一个格子左上角的像素坐标[32,666];return [(pos[0]-1)*this.cellWidth+1,(pos[1]-1)*this.cellWidth+1];},setTimer:function(){var speedArr = [180,160,140,120,100,80,60,40,20];var speed = this.speed;if(speed>8){speed = 8;}(function(theThis){var that = theThis;that.timer = setTimeout(function() {that.moveSnake();}, speedArr[speed]);})(this);},moveSnake:function(){//移动蛇的逻辑。数组处理。this.direction = this.nextDirection == ''?this.direction:this.nextDirection;//当前移动方向,和下一个移动方向。这样处理能避免一个bug.var direction = this.direction;var snakeArr = this.snakeArr;var snakeHead = snakeArr[snakeArr.length-1];switch(direction){case 1 ://向右snakeHead = [snakeHead[0]+1,snakeHead[1]];break;case 2 ://向下snakeHead = [snakeHead[0],snakeHead[1]+1];break;case 3 ://向左snakeHead = [snakeHead[0]-1,snakeHead[1]];break;case 4 ://向上snakeHead = [snakeHead[0],snakeHead[1]-1];break;}//超界,或撞上自己。结束,重置。if(in_array(snakeHead,snakeArr) || snakeHead[0]<0 || snakeHead[0]>this.x || snakeHead[1]<0 || snakeHead[1]>this.y){window.clearInterval(this.timer);alert('虽然失败了,不过没关系,还可以再来一局!本局得分:'+this.score);this.init();return;} snakeArr.push(snakeHead);//将蛇头放入数组 this.drawCell(snakeHead,1); if(snakeHead.toString() != this.coolPoint.toString()){var tail = snakeArr.shift();//移除蛇尾。this.drawCell(tail,0);}else{//撞到coolPointthis.createCoolPoint();this.drawCell(this.coolPoint,2);this.score = this.score + 10;this.scoreele.innerHTML="我的得分:"+this.score;this.speed = Math.ceil((this.score + 1)/100);this.speedele.innerHTML="当前速度:"+this.speed;}this.setTimer();},createCoolPoint:function(){//随机生成coolPoint,不在代表snakeArr的数组中。do{this.coolPoint = [getRandom(this.x),getRandom(this.y)];}while(in_array(this.coolPoint,this.snakeArr));},changeDiretion:function(){//更换移动方向。下一步的移动方向。var that = this;document.onkeydown=function(event){var e = event || window.event || arguments.callee.caller.arguments[0];var direction = that.direction;var keyCode = e.keyCode;switch(keyCode){case 39://右if(direction!=1 && direction !=3){that.nextDirection = 1;}break;case 40://下if(direction!=2 && direction !=4){that.nextDirection = 2;}break;case 37://左if(direction!=1 && direction !=3){that.nextDirection = 3;}break;case 38://上if(direction!=2 && direction !=4){that.nextDirection = 4;}break;default:break;}}; },drawSnake:function(){//绘制初始小蛇。var snakeArr = this.snakeArr;for (var i = 0,sLen=snakeArr.length; i < sLen; i++) {this.drawCell(snakeArr[i],1);};},drawCell:function(pos,type){//绘制会用到的几种颜色的图。var colorArr = ['#fff','rgb(0, 0, 0)',"red"];var cxt = this.cxt;var area;cxt.fillStyle = colorArr[type];area = this.getCellArea(pos);cxt.fillRect(area[0],area[1],this.cellWidth-1,this.cellWidth-1);}}function moveClock() { moveSnake(head.d);}var isMove = false;function beginGame() { !isMove && setInterval(moveClock, 300); isMove = true;}//生成随机正整数 1到n之间。function getRandom(n){return Math.floor(Math.random()*n+1)}//判断一个数组是否在另一个数组中。注意toString()function in_array(stringToSearch, arrayToSearch) {for (s = 0; s < arrayToSearch.length; s++) {thisEntry = arrayToSearch[s].toString();if (thisEntry == stringToSearch.toString()) {return true;}}return false;}

想直接下载代码的,请点击以下链接进入下载:

不会内卷/贪吃蛇小游戏 - 码云 - 开源中国 (gitee.com)

点击贪吃蛇项目代码即可看到相关的所有文件代码!

观看完了,麻烦给个点赞+收藏!!!

谢谢!!!

如果有更好的建议,可以私信或者在评论区留言一起讨论!!!

本文链接地址:https://www.jiuchutong.com/zhishi/290183.html 转载请保留说明!

上一篇:第十四届蓝桥杯第三期模拟赛 C/C++ B组 原题与详解(第十四届蓝桥杯大赛官网)

下一篇:古罗马广场,意大利 (© Peter Zelei Images/Getty Images)(古罗马广场意大利)

  • 13promax高刷在哪设置(iphone13promax高刷在哪)

    13promax高刷在哪设置(iphone13promax高刷在哪)

  • 微信不是群主可以@所有人吗(微信不是群主可以发起接龙吗)

    微信不是群主可以@所有人吗(微信不是群主可以发起接龙吗)

  • 红米note8nfc在哪里(红米note8nfc功能在哪里)

    红米note8nfc在哪里(红米note8nfc功能在哪里)

  • 退货天猫购物券退吗(天猫购物券退款后券退到哪里去了)

    退货天猫购物券退吗(天猫购物券退款后券退到哪里去了)

  • qq会员公众号怎么关注(关注qq会员手机qq公众号)

    qq会员公众号怎么关注(关注qq会员手机qq公众号)

  • 安卓的内存总是占一半(安卓内存越来越多)

    安卓的内存总是占一半(安卓内存越来越多)

  • 1200mbps是千兆路由器吗(1200兆路由器是千兆的)

    1200mbps是千兆路由器吗(1200兆路由器是千兆的)

  • 抖音老是卡顿咋回事(抖音总是卡是什么原因)

    抖音老是卡顿咋回事(抖音总是卡是什么原因)

  • 为客户提供接入因特网服务的什么简称是isp(为客户提供接入服务)

    为客户提供接入因特网服务的什么简称是isp(为客户提供接入服务)

  • 微信语音没有声音怎么办(微信语音没有声音)

    微信语音没有声音怎么办(微信语音没有声音)

  • 摄像头开了是不是亮红灯(摄像头开了是不是亮蓝灯)

    摄像头开了是不是亮红灯(摄像头开了是不是亮蓝灯)

  • 华为手机上眼睛图标怎么关闭(华为手机上眼睛标志是什么意思)

    华为手机上眼睛图标怎么关闭(华为手机上眼睛标志是什么意思)

  • 支付宝设置指纹支付怎么设置(支付宝设置指纹添加指纹在哪里)

    支付宝设置指纹支付怎么设置(支付宝设置指纹添加指纹在哪里)

  • 手机上的圆点在哪里设置的(手机上圆点怎么消除)

    手机上的圆点在哪里设置的(手机上圆点怎么消除)

  • 微信语音断断续续怎么办(微信语音断断续续怎么解决)

    微信语音断断续续怎么办(微信语音断断续续怎么解决)

  • 蓝光膜屏幕发黄正常吗(蓝光膜屏幕发黄怎么办)

    蓝光膜屏幕发黄正常吗(蓝光膜屏幕发黄怎么办)

  • 酷狗全屏歌词怎么调(酷狗全屏时显示歌词)

    酷狗全屏歌词怎么调(酷狗全屏时显示歌词)

  • qq音乐怎么更换铭牌(qq音乐怎么更换背景图片)

    qq音乐怎么更换铭牌(qq音乐怎么更换背景图片)

  • vue怎么慢动作(vue怎么倍速)

    vue怎么慢动作(vue怎么倍速)

  • 京东评价中心怎么删除(京东评价中心怎么找)

    京东评价中心怎么删除(京东评价中心怎么找)

  • 支付宝账户是什么意思(支付官网登录首页)

    支付宝账户是什么意思(支付官网登录首页)

  • 音乐球球没有声音是怎么回事(音乐球球怎么玩的)

    音乐球球没有声音是怎么回事(音乐球球怎么玩的)

  • 苹果怎么换机到安卓(苹果怎么换机到苹果12)

    苹果怎么换机到安卓(苹果怎么换机到苹果12)

  • 手机号不用了怎么办(手机号不用了怎么登录抖音)

    手机号不用了怎么办(手机号不用了怎么登录抖音)

  • 手机qq看加好友多少天(手机qq加好友没有搜索功能了)

    手机qq看加好友多少天(手机qq加好友没有搜索功能了)

  • 重装系统后软件如何恢复(重装系统后软件打不开)

    重装系统后软件如何恢复(重装系统后软件打不开)

  • 最小的索尼运行相机是什么(索尼体积最小的微单)

    最小的索尼运行相机是什么(索尼体积最小的微单)

  • 个人所得税专项附加扣除子女教育
  • 核定征收个体户个人经营所得税税率
  • 环境保护税是什么科目
  • 一般纳税人符合条件
  • 销售人员的福利项目包含什么
  • 劳务分期收款税率是多少
  • 购买方丢失未认证发票 怎么办
  • 企业收到银行收款通知
  • 外经证的项目范围
  • 承付期满日怎么算
  • 资产减值损失转回的账务处理
  • 营改增后进项税额分摊
  • 企业购买的衣服会计分录
  • 建筑工程地址
  • 增值税专用发票和普通发票的区别
  • 工资不在本公司发票报销可以吗?
  • 运费抵扣的税收筹划是怎样的?
  • 个体工商户税收优惠政策2023年最新
  • 福利费专票不抵税可以吗
  • 在深圳如何办理护照流程
  • 发票月初抄税流程
  • 建设工程是否可以约定非工程所在地仲裁委仲裁
  • 支票可以自己给自己开吗
  • 旅行社开的发票是否都要差额征税
  • 捐赠计提管理费的账务处理?
  • 文件夹怎么发送不了
  • 企业接到银行收账通知
  • win10自带的清理对固态有影响吗
  • linux设置权限规则
  • 企业补充养老保险
  • 埃热泽尔斯湖面上的波纹,拉脱维亚拉特加尔地区 (© Eaglewood Films/Nimia)
  • php零基础入门
  • phpget方法
  • easyui给下拉框赋值
  • PHP:imagecreatefromwbmp()的用法_GD库图像处理函数
  • 磷酸二氢钙生产
  • 向农户收购农产品怎么打款
  • 生产型企业出口外购货物可以退税吗
  • 本年利润怎么结转到未分配利润分录
  • 非常经典的php文章
  • php fopen读取文件
  • 微信小程序怎么制作自己的小程序
  • yii2框架面试题
  • 支付第三方劳务费计入什么科目
  • 微信收款会计入个人所得税吗
  • 管家婆中已经过账的进货单怎么删除?
  • 计提税费可以记入成本吗
  • 织梦网站特有标识
  • 支付债券发行费怎么算
  • 免交增值税应该计入什么科目
  • 企业固定资产贷款二押的风险
  • mysql数据表分区
  • 个税申报错误已经扣税款怎么处理
  • 公司购买汽车的会计分录
  • 企业非流动资产包括
  • 个体户也需要纳税吗
  • 换货与退货
  • 电子银行承兑汇票到期怎么兑现
  • 教育经费支出
  • 什么是汇总记账凭证账务处理程序?有哪些特点?
  • mac mysql初始密码
  • win10下面任务栏
  • windows2003硬盘分区
  • mac苹果系统怎么用
  • linux 匹配字符
  • ios8.4.1完美越狱教程
  • macos终端命令
  • 人工智能最受欢迎的一门编程语言
  • netcfghlp怎么安装
  • nodejs怎么启动服务
  • Node.js中的事件循环是什么意思
  • nodejs开发文档
  • Android屏幕适配分屏
  • 关于使用RequestWindowFeature为啥一定要在setContentView之前调用
  • Javascript字符串对象函数
  • 简述activity的生命周期中有哪几种状态
  • 收到银行手续费发票怎么做分录
  • 重庆电子税务局官网登录入口
  • 卷烟批发环节的税率
  • 瑞士州税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设