js编写简单的贪吃蛇游戏
css代码
*{
margin:;
padding:;
}
td{
width: 4px;
height: 4px;
background: #ccc;
border: 2px solid #ccc;
}
table{
margin: 60px auto 0;
border: 10px solid #333;
background: #ccc;
}
js代码
window.onload = function(){
snake();
};
function snake(){
//<table><tbody><tr><td></td><td></td><td></td></tr></tbody></table>
//创建表格的外层,并存入变量
var oTa = document.createElement('table');
var oTb = document.createElement('tbody');
//循环生成40*40的表格
for(var i=0; i<40; i++){
var oTr = document.createElement('tr');
//需要生成td
for(var j=0; j<40; j++){
var oTd = document.createElement('td');
//oTd.style = "background:#ccc";
oTr.appendChild(oTd);
}
//将tr放到tbody中
oTb.appendChild(oTr);
}
//将tbody放入table中
oTa.appendChild(oTb);
oTa.cellSpacing = '1';
document.body.appendChild(oTa);
//约定一下所有的颜色 黑边框#333 大背景#ccc 红点背景red #555蛇身的颜色 #eee蛇头的颜色
//随机一个红点,先获取所有的td存起来,以便后续使用
var aTd = document.getElementsByTagName("td");
fruit();
function fruit(){
var num = Math.floor( Math.random()*aTd.length );
//判断是否和蛇重复了
if(aTd[num].style.backgroundColor != 'rgb(238, 238, 238)' && aTd[num].style.backgroundColor != 'rgb(85, 85, 85)'){
aTd[num].style = 'background:red;border:2px solid #333';
}else{
fruit();
}
}
//初始化蛇的位置
var arr = [[19,20]];
var rows = oTb.rows;
var timer = null;
var keyTimer = null;
var directionCode = "";
var snakeMove ="";
snakeColor();
function snakeColor(){
//蛇身的颜色需要设置
//通过tbody的rows属性可以找到下面的所有tr ,通过tr的cells属性可以找到下面所有td
for(var i=0; i<arr.length; i++){
rows[arr[i][0]].cells[arr[i][1]].style = 'background:#555;border:2px solid #333';
}
rows[arr[0][0]].cells[arr[0][1]].style = 'background:#eee;border:2px solid #333'; //19 = arr[0][0] 20 = arr[0][1]
}
//检测键盘事件
document.onkeydown = function(e){
e = e || window.event;
//console.log(e.keyCode);
clearTimeout(keyTimer);
keyTimer = null;
keyTimer = setTimeout(function(){
doKeyAction(e.keyCode);
},20)
function doKeyAction(keyCo){
if( keyCo==37||keyCo==38||keyCo==39||keyCo==40 ){
if(Math.abs(directionCode-keyCo) == 2 || directionCode == keyCo){
return;
}else{
directionCode = keyCo;
}
}
//37 38 39 40 左上右下 32空格 enter 13
switch (keyCo){
case 37:
//需要执行的代码
snakeTimer(0,-1);
break;
case 38:
//上需要执行的代码
snakeTimer(-1,0);
break;
case 39:
//右需要执行的代码
snakeTimer(0,1);
break;
case 40:
//下需要执行的代码
snakeTimer(1,0);
break;
case 32:
//空格需要执行的代码 暂停 继续
//snakeTimer(0,-1);
if(timer){
clearInterval(timer);
timer = null;
}else{
snakeMove && snakeMove(); // || && a || b 如果a为真,就不会执行b a && b 如果a为真才会执行b
}
break;
}
}
//运动的timer
function snakeTimer(y,x){
snakeMove = function(){
snakeTimer(y,x);
};
clearInterval(timer); //TUDO这里的清除timer只是暂时处理
timer = setInterval(function(){
//console.log( [arr[0][0],arr[0][1]-1] );
//当达到25个的时候,进入下一关
if(arr.length >=25){
clearInterval(timer);
alert("恭喜,进入下一关");
window.snakeSpeed = window.snakeSpeed*0.8;
document.body.removeChild(oTa);
snake();
}
//检测是否碰到边缘了
if(arr[0][0]+y<0 || arr[0][0]+y>39 || arr[0][1]+x<0 || arr[0][1]+x>39){
fail();
return;
}
//检测是否撞到自己了
for(var i=1; i<arr.length; i++){
if(arr[0][0]+y == arr[i][0] && arr[0][1]+x == arr[i][1]){
fail();
return;
}
}
arr.unshift( [arr[0][0]+y,arr[0][1]+x] ); //arr.unshift(新值),在arr最前面插入一个(新值)
//是否遇到红色的块了
if(rows[arr[0][0]].cells[arr[0][1]].style.backgroundColor == 'red'){
//console.log("已经迟到水果了");
//重新去生成以红点
fruit();
//console.log(arr);
}else{
rows[arr[arr.length-1][0]].cells[arr[arr.length-1][1]].style = 'background:#ccc;border:2px solid #ccc'; //如何寻找数组的最后一个,arr[arr.length-1]
arr.pop();
}
snakeColor();
},window.snakeSpeed);
}
function fail(){
clearInterval(timer);
alert("任务失败");
//TODO:任务失败后重新加载游戏
document.body.removeChild(oTa);
snake();
}
};
if(!window.snakeSpeed){
alert("点击方向键开始游戏,点击空格暂停");
window.snakeSpeed = 100;
}
}
js编写简单的贪吃蛇游戏的更多相关文章
- d3.js 制作简单的贪吃蛇
d3.js是一个不错的可视化框架,同时对于操作dom也是十分方便的.今天我们使用d3.js配合es6的类来制作一个童年小游戏–贪吃蛇.话不多说先上图片. 1. js snaker类 class Sna ...
- 用最少的JS代码写出贪吃蛇游戏---迷你版
游戏进行页面展示 GAME OVER 页面展示 代码如下: <!doctype html> <html> <body> <canvas id=&q ...
- 用OpenGL简单编写的一个最简单贪吃蛇游戏
刚学OpenGL的时候,写的一个最简单的贪吃蛇游戏代码 如下: //贪吃蛇游戏 #include<stdio.h> #include<stdlib.h> #include< ...
- Qt 学习之路 2(34):贪吃蛇游戏(4)
Qt 学习之路 2(34):贪吃蛇游戏(4) 豆子 2012年12月30日 Qt 学习之路 2 73条评论 这将是我们这个稍大一些的示例程序的最后一部分.在本章中,我们将完成GameControlle ...
- Linux平台下贪吃蛇游戏的运行
1.参考资料说明: 这是一个在Linux系统下实现的简单的贪吃蛇游戏,同学找帮忙,我就直接在Red Hat中调试了一下,参考的是百度文库中"maosuhan"仁兄的文章,结合自己的 ...
- 使用Love2D引擎开发贪吃蛇游戏
今天来介绍博主近期捣腾的一个小游戏[贪吃蛇],贪吃蛇这个游戏相信大家都不会感到陌生吧.今天博主将通过Love2D这款游戏引擎来为大家实现一个简单的贪吃蛇游戏,在本篇文章其中我们将会涉及到贪吃蛇的基本算 ...
- 100行JS实现HTML5的3D贪吃蛇游戏
js1k.com收集了小于1k的javascript小例子,里面有很多很炫很酷的游戏和特效,今年规则又增加了新花样,传统的classic类型基础上又增加了WebGL类型,以及允许增加到2K的++类型, ...
- JS贪吃蛇游戏
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- JavaScript实践-简单的贪吃蛇小游戏
实现逻辑: //获取Html中的格子(行,列) //建立数组存储所有格子(x,y) //建立数组用于存储蛇身(x,y) //生成随机坐标(x,y)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...
随机推荐
- 【web】之 jquery上传插件的Plupload的使用
首先下载plupload->http://www.plupload.com 因为Plupload可配置参数比较多,所以这里讲解最常用的,结合jquery-ui展示的界面!如下: Plupload ...
- Java中如何动态创建接口的实现
有很多应用场景,用到了接口动态实现,下面举几个典型的应用: 1.mybatis / jpa 等orm框架,可以在接口上加注解进行开发,不需要编写实现类,运行时动态产生实现. 2.dubbo等分布式服务 ...
- React的学习(上)
摘要 众所周知,前端三大框架Angular.React.Vue,所以为了跟上时代的步伐,最近开始着手学习React,这时候就发现个大问题,框架一直在更新,提倡的编写语法也在更新,网上有许多教程都是一两 ...
- 从源码角度入手实现RecyclerView的Item点击事件
RecyclerView 作为 ListView 和 GridView 的替代产物,相信在Android界已广为流传. RecyclerView 本是不会有类似 ListView 的那种点击事件,但是 ...
- Lucene工作原理
Lucene是一个高性能的java全文检索工具包,它使用的是倒排文件索引结构.该结构及相应的生成算法如下: 0)设有两篇文章1和2 文章1的内容为:Tom lives in Guangzhou,I l ...
- StringHelper--封转自己的字符串工具类
我们每次开发项目,都会有很多的关于字符串的处理,字符串的处理太常见了,无法避免,那么这时如果可以把常用的字符串处理封装成类,在以后的开发中应该会减少一些工作量,下面代码对一些常用的字符串处理进行了封装 ...
- EverythingAboutJava
1 GC gabage collection 垃圾回收Java GC系列(1):Java垃圾回收简介 http://mp.weixin.qq.com/s?src=3×tamp=149 ...
- C#基础知识-流程控制的应用(四)
流程控制我们在编程中运用到的地方非常的多,在上篇中仅仅只是简单的介绍每一种的使用,并没有运用到实例中,很难去理解它真正的作用.下面我们将实际的运用流程控制的代码写一些实例相关的程序,加深对流程控制的理 ...
- VueJs开发笔记—IDE选择和WebStorm性能优化、框架特性和数据调用、路由选项以及使用
一.IDE的选择: VsCode和WebStorm都是不错的选择,两者运行调试都非常的方便都可以使用快捷键运行和停止,就打开项目的速度和对电脑配置的要求来说,vscode要比webstorm要出色很多 ...
- 深入理解Java常用类----String(二)
上篇介绍了String类的构造器,获取内部属性等方法,最后留下了最常用的局部操作函数没有介绍,本篇将接着上篇内容,从这些最常见的函数的操作说起,看看我们日常经常使用的这些方法的内部是怎么实现的.第一个 ...