前端那些事之原生 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…

Linux格式化异常,Linux下DateFormat的parse方法出现”ParseException”异常

在windows下使用DateFormat的parse方法&#xff0c;将字符中转化为Date类型时&#xff0c;一切正常。可安装到Linux下&#xff0c;就出现了ParseException异常。代码如下&#xff1a;public Date toDateTime(String str){Date dt new Date();try{DateFormat df;df DateFormat…

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

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

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

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

*args, **kwargs的用法

python 中参数*args, **kwargs def foo(*args, **kwargs): print args , args print kwargs , kwargs print ---------------------------------------if __name__ __main__: foo(1,2,3,4) foo(a1,b2,c3) foo(1,2,3,4, a1,b2,c3) foo(a, 1, None, a1, b2, c3)输出结果如下&…

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

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

linux运维适合女生么,女生真的不适合做IT行业吗?Linux运维适合女生学习吗?

在很多人的脑海中都是女生不适合做IT&#xff0c;IT行业不适合女性。可能传统的思想中&#xff0c;女生只适合做文职工作&#xff0c;比如说幼师、公务员、会计等&#xff0c;就因为这样的思想也让IT行业男女出现了失衡的情况&#xff0c;那么作为女生真的不适合做IT行业吗?Li…

关于在用异步消息处理机制使用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;第一是直接作为脚本执行&…

vim 配置

vim包下载 https://github.com/spf13/spf13-vim 安装教程 http://blog.csdn.net/u011729865/article/details/49210841 https://www.zhihu.com/question/20151659转载于:https://www.cnblogs.com/aituming/p/6013279.html

自己简单封装的自己项目需要的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…

excel导入linux乱码怎么解决方法,,请大家都来看下,Excel导入有乱码?原因出在哪里?应该怎么解决?...

老师&#xff0c;感谢你再次的回答。我按照您的方法操作&#xff0c;转换utf-8另外为CSV格式&#xff0c;然后这个CSV格式在Notepad 编辑器中打开后&#xff0c;没有乱码&#xff0c;μ 符号(希腊字符)正确显示。我想导入文件已经准备完毕&#xff0c;当我导入的时候&#xff0…

Oracle 正则表达式

一. 正则表达式简介: 正则表达式&#xff0c;就是以某种模式来匹配一类字符串。一旦概括了某类字符串&#xff0c;那么正则表达式即可用于针对字符串的各种相关操作。例如&#xff0c;判断匹配性&#xff0c;进行字符串的重新组合等。正则表达式提供了字符串处理的快捷方式。…

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

这个问题来自于知乎用户的提问&#xff0c;当时看到这个问题&#xff0c;我只是做了下简单的回答。后来我发现&#xff0c;对于很多人来说&#xff0c;更准确的说应该是大部分的 Python 初学者&#xff0c;对这个问题理解的不是很深刻。所以这里我来做下总结&#xff0c;并试图…

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;可在线阅读&#xff0c;更多相关《求解迷宫问题(c语言,很详细哦(5页珍藏版)》请在人人文库网上搜索。1、求迷宫问题就是求出从入口到出口的路径。在求解时 , 通常用的是 “穷举求解”的方法 ,即从入口出发 ,顺某一方向向…

模块概述

概述 目前代码比较少&#xff0c;写在一个文件中还体现不出什么缺点&#xff0c;但是随着代码量越来越多&#xff0c; 代码就越来越难以维护 为了解决难以维护的问题&#xff0c;我们把很多相似功能的函数分组&#xff0c;分别放到不同的文件中取。这样每个文件所包含的内容相…

【MySQL】PREPARE 的应用

简单的用set或者declare语句定义变量&#xff0c;然后直接作为sql的表名是不行的&#xff0c;mysql会把变量名当作表名。在其他的sql数据库中也是如此&#xff0c;mssql的解决方法是将整条sql语句作为变量&#xff0c;其中穿插变量作为表名&#xff0c;然后用sp_executesql调用…

简历要求中“ 扎实的JAVA基础”的学习方法

最近在头条看到一篇关于Java基础学习的文章&#xff0c;感觉写的很不错&#xff0c;分享一下&#xff0c;希望对大家有帮助 什么东西算作Java基础&#xff1f;学到什么程度才算扎实&#xff1f; 这些问题的答案&#xff0c;LZ已经用文言文告诉你了&#xff0c;咳咳&#xff0c;…