前端那些事之原生 js实现贪吃蛇篇

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

原生js实现贪吃蛇

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>贪吃蛇游戏</title><style>body, div, img {margin: 0 auto;padding: 0;}body{background-color: #fff;color:#b35208;}.wrapper{width: 800px;height: 400px;background: url("./images/bg.png") no-repeat center center;padding: 80px;}.score{margin: 10px auto;text-align: center;font-size: 30px;font-weight: 900;}.col{width: 40px;height: 40px;float: left;display: inline-block;}.row{}.snake{background: url("./images/box.png") no-repeat center center;background-size: 100% 100%;}.egg{background: url("./images/circle.png") no-repeat center center;background-size: 100% 100%;}.gameover{position: fixed;top: 50%;left: 50%;width: 408px;height: 90px;margin-top: -90px;margin-left:-204px;background: url("./images/gameover.png") no-repeat center center;opacity:0;transform: scale(0);transition: all .5s;z-index: -1;}.show{opacity:1;transform: scale(1);z-index: 1;}</style>
</head>
<body>
<div class="gameover" id="gameover"></div>
<div class="score">得分:0</div>
<div class="wrapper"><!--<div class="row">--><!--<div class="col snake"></div>--><!--<div class="col"></div>--><!--<div class="col egg"></div>--><!--</div>-->
</div>
<script>/** 1.创建基础* 2.蛇的初始化,实物的初始化(随机)* 3.开始游戏*   1.键盘事件切换*   2.开始之后,判断是否碰到墙*   3.判断是否碰到自己*   4.判断是否吃了实物* 4.游戏结束* */var scoreDiv = document.querySelector(".score"); //取得分的div对象var score = 0;//得分var rows = 9; //行var cols = 20; //列var snakeArr = []; //存储所有对象var time = 400; //毫秒var snakebody = []; //定义一个数组存放蛇身var direction = "right"; //操作蛇移动的方向var changeDir = true; //添加键盘事件监听方向键来改变蛇的移动方向function createModel(){//创建基础var wrapperDiv = document.querySelector(".wrapper");for(var i = 0; i < rows; i++) {var rowDiv = document.createElement("div");var rowArry = [];for(var j = 0; j < cols; j++) {var colDiv = document.createElement("div");colDiv.className = "col";rowArry.push(colDiv);rowDiv.appendChild(colDiv);}snakeArr.push(rowArry);wrapperDiv.appendChild(rowDiv);}wrapperDiv.style.width = cols * 40 + "px";wrapperDiv.style.margin = "auto";}//创建蛇的初始模型function snake() {for(var i = 0; i < 3; i++) {snakeArr[0][i].className = "col snake";snakebody.push(snakeArr[0][i]);}}createModel();snake();document.onkeydown = function(event) {event = event || window.event; //判断是否需要改变方向,true表示需要 false不需要if(!changeDir) {return; //表示直接结束函数,后续代码不执行}//假设蛇在向右移动,按键左右都不起作用if(direction == "right" && event.keyCode == "37") {return;}if(direction == "left" && event.keyCode == "39") {return;}if(direction == "down" && event.keyCode == "38") {return;}if(direction == "up" && event.keyCode == "40") {return;}//更据按键操作,设置方向switch(event.keyCode) {case 37:direction = "left"; //方向向左break;case 38:direction = "up";break;case 39:direction = "right";break;case 40:direction = "down";break;}//按键后变为falsechangeDir = false;//延迟var delayTime = setTimeout(function() {changeDir = true;clearTimeout(delayTime);}, time);}//蛇的移动偏移量var x = 2;var y = 0;//蛇的移动函数function snakeMove() {var snameTimer = setInterval(function() {//更据设置的方向设置蛇头的方向switch(direction) {case "right":x++;break;case "left":x--;break;case "up":y--;break;case "down":y++;break;}//判断游戏结束--碰壁if(x < 0 || x >= cols || y < 0 || y >= rows) {document.getElementById("gameover").style.display = "block";clearInterval(snameTimer);return;}//判断蛇吃到自己for(var i = 0; i < snakebody.length; i++) {if(snakebody[i] == snakeArr[y][x]) {document.getElementById("gameover").style.display = "block";clearInterval(snameTimer);return;}}//判断蛇头移动的位置是否有蛋if(eggX == x && eggY == y) {snakeArr[eggY][eggX].className = "col snake";snakebody.push(snakeArr[eggY][eggX]);//加入到蛇身score++;scoreDiv.innerHTML = "得分:" + score;food();} else {snakebody[0].className = "col";snakebody.shift();snakeArr[y][x].className = "col snake";snakebody.push(snakeArr[y][x]);}}, time);}snakeMove();//随机函数function randomNumber(max) {var ran = Math.floor(Math.random() * max);return ran;}//生成蛋的函数var eggX = 0;var eggY = 0;function food() {//随机出新的egg的下标的x和yeggX = randomNumber(cols);eggY = randomNumber(rows);//如果即将生蛋的位置和蛇身重合if(snakeArr[eggY][eggX].className == "col snake") {food(); //重新生成} else {//否则 新生生蛋的位置并改样式snakeArr[eggY][eggX].className = "col egg";}}food();
</script>
</body>
</html>

转载于:https://my.oschina.net/yongxinke/blog/852277

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

整理一些完全免费开放的API接口

前言 在开发测试阶段&#xff0c;或者是在写Demo的时候&#xff0c;难免会用到一些测试数据&#xff0c;有时苦于没有可用的接口&#xff0c;需要自己动手去写&#xff0c;但是这样大大降低了效率&#xff0c;前期我也找了一些开放的接口&#xff0c;这篇文章整理一下&#xff…

如何发现优秀的开源项目?

之前发过一系列有关 GitHub 的文章&#xff0c;有同学问了&#xff0c;GitHub 我大概了解了&#xff0c;Git 也差不多会使用了&#xff0c;但是 还是搞不清 GitHub 如何帮助我的工作&#xff0c;怎么提升我的工作效率&#xff1f; 问到点子上了&#xff0c;GitHub 其中一个最重…

自已开发完美的触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器

手机端网页版app在使用下拉列表时&#xff0c;传统的下拉列表使用起来体验非常不好&#xff0c;一般做的稍好一点的交互功能界面都不会直接使用下拉列表&#xff0c;所以app的原生下拉列表都是弹窗列表选择&#xff0c;网页型app从使用体验上来当然也应该做成那样&#xff0c;前…

一个 js 中值传递和引用传递的坑。

今天在调试代码时遇到一个问题&#xff0c;刚开始想不明白&#xff0c;然后分析了一下后&#xff0c;才知道其中的问题&#xff0c;这也是一个基础的问题&#xff0c;&#xff08;所以基础是很重要的&#xff09; 代码如下&#xff1a; var a 3; a a * 2; console.log(a); //…

关于在用异步消息处理机制使用Message.Obtain()方法(而非New Message)获得一个Message对象的好处

类概述 定义一个包含任意类型的描述数据对象&#xff0c;此对象可以发送给Handler。对象包含两个额外的int字段和一个额外的对象字段&#xff0c;这样可以使得在很多情况下不用做分配工作。 尽管Message的构造器是公开的&#xff0c;但是获取Message对象的最好方法是调用Messag…

python编程中的if __name__ == 'main': 的作用和原理

大多数编排得好一点的脚本或者程序里面都有这段if __name__ main: &#xff0c;虽然一直知道他的作用&#xff0c;但是一直比较模糊&#xff0c;收集资料详细理解之后与打架分享。 1、这段代码的功能 一个python的文件有两种使用的方法&#xff0c;第一是直接作为脚本执行&…

自己简单封装的自己项目需要的http请求

2019独角兽企业重金招聘Python工程师标准>>> package www.tydic.com.util;import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Http…

Java基础中按值传递和引用传递详解

下面是我在网上看到的一个帖子&#xff0c;解释的感觉挺全面&#xff0c;就转过来&#xff0c;以供以后学习参考&#xff1a; 1&#xff1a;按值传递是什么 指的是在方法调用时&#xff0c;传递的参数是按值的拷贝传递。示例如下&#xff1a; [java] view plaincopy public cla…

【Foreign】采蘑菇 [点分治]

采蘑菇 Time Limit: 20 Sec Memory Limit: 256 MBDescription Input Output Sample Input 51 2 3 2 31 21 32 42 5Sample Output 10912911HINT Main idea 询问从以每个点为起始点时&#xff0c;各条路径上的颜色种类的和。 Solution 我们看到题目&#xff0c;立马想到了O(n^2)…

c语言程序设计贪吃蛇需求分析,C语言编程新手入门基础进阶学习!贪吃蛇小游戏演示和说明...

C语言是面向过程的&#xff0c;而C&#xff0b;&#xff0b;是面向对象的设计贪吃蛇游戏的主要目的是让大家夯实C语言基础&#xff0c;训练编程思维&#xff0c;培养解决问题的思路&#xff0c;领略多姿多彩的C语言。游戏开始后&#xff0c;会在中间位置出现一条只有三个节点的…

Strus2中关于ValueStack详解

什么是ValueStack 它是一个接口com.opensymphony.xwork2.util.ValueStack。我们使用它是将其做为一个容器&#xff0c;用于携带action数据到页面。在页面上通过ognl表达式获取数据。 valueStack主要是将action数据携带到页面上&#xff0c;通过ognl获取数据 1.ValueStack有一个…

c语言递归汉诺塔次数,汉诺塔问题(C语言经典递归问题(一))

把A杆上的金盘全部移到C杆上&#xff0c;并仍保持原有顺序叠好。操作规则&#xff1a;每次只能移动一个盘子&#xff0c;并且在移动过程中三根杆上都始终保持大盘在下&#xff0c;小盘在上&#xff0c;操作过程中盘子可以置于A、B、C任一杆上。思路&#xff1a;图解&#xff1a…

理解浏览器是如何加载及渲染网页的

先上图&#xff0c;我们再慢慢解释&#xff0c;这图就是浏览器加载网页的一个过程 当我们在浏览器输入一个地址&#xff08;比如:http://toadw.cn&#xff09;,那么点击回车后&#xff0c;浏览器是如何加载网页的呢&#xff1f; 加载过程 一开始浏览器是不知道你输入的http://t…

CentOS下的Mysql的安装和使用

1.使用安装命令 &#xff1a;yum -y install mysql mysql-server mysql-devel 安装完成却发现Myserver安装缺失&#xff0c;在网上找原因&#xff0c;原来是因为CentOS 7上把MySQL从默认软件列表中移除了&#xff0c;用MariaDB来代替&#xff0c;所以这导致我们必须要去官网上…

Android中创建自己的对话框

Activities提供了一种方便管理的创建、保存、回复的对话框机制&#xff0c;例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dismissDialog(int)等方法&#xff0c;如果使用这些方法的话&#xff0c;Activity将通过getOwnerActivity()方法返回该Act…

一件很好笑的事情

我是一个比较习惯努力学习的人&#xff0c; 我也会去学习各种可能与我有交集的知识&#xff0c; 就在这几天&#xff0c;我看到以前的一个android网络培训学校开办了C/C的培训&#xff0c;这是挺好的事&#xff0c; 但是看他们的文件&#xff0c;我就奇怪了。 这份文件&#xf…

关于Eclipes的Logcat无法打印消息的解决办法

转自&#xff1a;http://blog.csdn.net/harry211/article/details/8453532 调试程序需要打印一些消息出来&#xff0c;logcat不好用的话就很麻烦了。这个问题折腾了好久&#xff0c;为啥就是不出来呢&#xff1f; 上网找了很多解决办法&#xff1a; 重启eclipse 重启adb 重启…

17:文字排版

17:文字排版 查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述给一段英文短文&#xff0c;单词之间以空格分隔&#xff08;每个单词包括其前后紧邻的标点符号&#xff09;。请将短文重新排版&#xff0c;要求如下&#xff1a; 每行不超过80个字符&#xff1b;每个单词…

解决AttributeError: 'str' object has no attribute 'decode'报错问题

顺着报错文件点进去&#xff0c;找到query query.decode(errors‘replace’) 将decode修改为encode即可

解决python中html 代码被注释掉 依旧被解释导致报错ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx)

ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx) 注释的是Html代码&#xff0c;是给浏览器看的。 Html里的代码还是要执行。注释python代码用{# #}