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)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...
随机推荐
- Mac Hadoop2.7.2的安装与配置
这里介绍Hadoop 2.7.2在mac下的安装与配置. 安装及配置Hadoop 首先安装一下Hadoop $ brew install Hadoop 配置ssh免密码登录 用dsa密钥认证来生成一对 ...
- 简谈-如何使用Python和R组合完成任务
概述 和那些数据科学比赛不同,在真实的数据科学中,我们可能更多的时间不是在做算法的开发,而是对需求的定义和数据的治理.所以,如何更好的结合现实业务,让数据真正产生价值成了一个更有意义的话题. 数据科学 ...
- python——面向对象相关
其他相关 一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 1 2 3 4 5 6 class Foo(object): pass obj = Foo( ...
- placeholder各种浏览器兼容问题
只要在页面上引入placeholder.min文件,再以$('input,textarea').placeholder(); 就可以兼容ie等各种浏览器. placeholder.min.js文件链接 ...
- 【原创】bootstrap框架的学习 第八课 -[bootstrap表单]
Bootstrap 提供了下列类型的表单布局: 垂直表单(默认) 内联表单 水平表单 吹着表单或基本表单 向父 <form> 元素添加 role="form". 把标签 ...
- 安装node-saas包报错问题
项目中用到一些sass写的样式,但是每次一编译就报错 按照它上面的提醒,npm rebuild node-sass --force,还是一样有错.不过仔细看看他的错误信息我发现了其中这条: gyp v ...
- 开始奇妙的DP之旅
铭记各位大佬教导,开始看一些很迷的动态规划,那就从比较典型的01背包开始吧,想想还是从比较简单的导弹拦截开始吧,说简单都是骗人的,还是看采药吧. 一.动态规划 刚听到动态规划这个东西,据HLT大佬所言 ...
- codeforces 528D Fuzzy Search
链接:http://codeforces.com/problemset/problem/528/D 正解:$FFT$. 很多字符串匹配的问题都可以用$FFT$来实现. 这道题是要求在左边和右边$k$个 ...
- 简介vsftpd及搭建配置
一.简介 FTP(文件传输协议)全称是:Very Secure FTP Server. Vsftpd是linux类操作系统上运行的ftp服务器软件. vsftp提供三种登陆方式:1.匿名登录 2 ...
- 分针网—IT教育:作为PHP开发人员容易忽视的几个重点
无论是学习什么样的一个开发.ASP开发.java开发.当学习还不是很久的时候,一般都是不知道它们的精华是在哪里,而现在很多的php程序员也是不知道PHP的精华所在,为什么perl在当年在商界如此的出名 ...