<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
.container{height: 300px;width: 300px;position: relative;margin: 100px auto;background: #c2e2ae;}
.bgTable{border: 1px solid black;border-spacing: 0;border-collapse:collapse;position: absolute}
.bgTable td{height: 20px;width: 20px;border: 1px solid black}
.bgTable tr{height: 20px;width: 100px;border: 1px solid black}
.cube{display: block;height:22px;width: 22px;background: red;position: absolute;margin: 1px}
#cu2{top: 0px;left:115px }
</style>
</head>
<body>
<div class="container">
<table class="bgTable">
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
</table>
<span class="cube" id="cu1"></span>
<span class="cube" id="cu2"></span>
</div>
<script>
var container=document.querySelector('.container');
var cube=document.querySelector('.cube');
var up=38,down=40,left=37,right=39;// 上下左右 方向键的键码(keyCode)是38、40、37和39,
var t1,t2,t3,t4;
var cu1=document.querySelector('#cu1');
var cu2=document.querySelector('#cu2');
var randomdot=[0,23,46,69,92,115,138,161,184,207,230,253,276];//随机自由点位置
var n=2; var arrLeft=[],arrTop=[];//用来存储第一个方块每一步的位置 /*设置向上下左右移动*/
function moveLeft(obj){
t1=setInterval(function(){
obj.style.left=obj.offsetLeft-24+'px';
arrLeft.push(obj.offsetLeft);//存储位置
arrTop.push(obj.offsetTop);
if(obj.offsetLeft<=20){clearInterval(t1);}
},500)
}
function moveRight(obj){
t2=setInterval(function(){
obj.style.left=obj.offsetLeft+22+'px';
arrLeft.push(obj.offsetLeft);
arrTop.push(obj.offsetTop);
if(obj.offsetLeft>=270){clearInterval(t2);}
},500)
}
function moveTop(obj){
t3=setInterval(function(){
obj.style.top=obj.offsetTop-24+'px';
arrLeft.push(obj.offsetLeft);
arrTop.push(obj.offsetTop);
if(obj.offsetTop<=20){clearInterval(t3);}
},500)
}
function moveBottom(obj){
t4=setInterval(function(){
obj.style.top=obj.offsetTop+22+'px';
arrLeft.push(obj.offsetLeft);
arrTop.push(obj.offsetTop);
if(obj.offsetTop>=270){clearInterval(t4);}
},500)
}
/*对上下左右按键进行监听,按下某一个,会取消其他方向的移动,*/
document.onkeydown=function(){
var obj=cu1;
if(event.keyCode==up){
clearInterval(t1);
clearInterval(t2);
clearInterval(t3);
clearInterval(t4);
moveTop(obj);
}else if(event.keyCode==down){
clearInterval(t1);
clearInterval(t2);
clearInterval(t3);
clearInterval(t4);
moveBottom(obj);
}else if(event.keyCode==left){
clearInterval(t1);
clearInterval(t2);
clearInterval(t3);
clearInterval(t4);
moveLeft(obj);
}else if(event.keyCode==right){
clearInterval(t1);
clearInterval(t2);
clearInterval(t3);
clearInterval(t4);
moveRight(obj);
}
};
/*用来产生随机位置的自由方块*/
function newdot(){
var dot=document.createElement('span');
dot.className='cube';
container.appendChild(dot);
console.log(container.childElementCount);
var top1=Math.floor(Math.random()*14);
dot.style.top=''+randomdot[top1]+'px';
var left1=Math.floor(Math.random()*14);
dot.style.left=''+randomdot[left1]+'px';
}
/*当第一个方块和自由方块的位置重叠,自由方块将跟随第一个方块移动*/
function together(){
var container=document.querySelector('.container');
var small=container.lastElementChild;
if(cube.offsetLeft==small.offsetLeft&&cube.offsetTop==small.offsetTop){
var a=n;//用a将n的某一次的值固定
setInterval(function(){
/*自由方块1的位置为第一个方块倒一步的位置,自由方块2的位置为第一个方块倒两步的位置,以此内推*/
small.style.left=arrLeft[arrLeft.length-a]-1+'px';
small.style.top=arrTop[arrTop.length-a]-1+'px';
},10);
newdot();
n++;
}
}
T=setInterval(function(){
together();
},500); </script>
</body>
</html>

采用JavaScript编写的贪吃蛇,用了数组和定时器,坐标相关的知识,用了一下午,还是挺好玩的,就是没有写游戏结束,还有一些逻辑没有完成,永远都不会死的。。。

javascript 编写的贪吃蛇的更多相关文章

  1. JavaScript实现的--贪吃蛇

    总的实现思路: 一.效果部分:  1.编写html代码,加上样式. 二.JavaScript部分:  1.利用dom方法创建一块草坪,即活动区域:   2.创建一条蛇,并设置其初始位置:       ...

  2. JavaScript 小游戏 贪吃蛇

    贪吃蛇 代码: <!DOCTYPE html><html><head> <meta charset="UTF-8"> <met ...

  3. JavaScript新手入门 贪吃蛇

    从小就在玩贪吃蛇,但是知道今天自己做了一遍才知道原理的具体的实现步骤. 刚进入界面时显示开始游戏(不重要,本人比较喜欢吹毛求疵) 中间黑色部分为游戏的主要展示部分 主要步骤及源码: body中代码,红 ...

  4. javascript实现游戏贪吃蛇

    1.设计蛇:属性有宽.高.方向.状态(有多少节),方法:显示,跑 2.设计食物:属性宽.高 3.显示蛇:根据状态向地图里加元素 4.蛇跑起来:下一节到前一节的位置,蛇头根据方向变,删除原来的蛇,新建蛇 ...

  5. 原生JavaScript实现的贪吃蛇

    github代码地址:https://github.com/McRayFE/snake 涉及到的知识点: 键盘事件 setInterval()定时器 javascript中数组的使用 碰撞的检测 of ...

  6. JavaScript 面向对象思想 贪吃蛇游戏

    js代码: 游戏的对象 ,食物,蛇 ,游戏控制思路如下 (完整代码在https://github.com/774044859yf/ObjectSnakeGame下载) var snake = { aS ...

  7. C - 简易贪吃蛇的编写

    不多废话,直接进入正题——用C编写简易贪吃蛇.附上拙劣的源码 * c-snake * 首先说明使画面动起来的原理:通过 system("cls"); 清除当前控制台的显示,再pri ...

  8. 用 Python 写个贪吃蛇,保姆级教程!

    本文基于 Windows 环境开发,适合 Python 新手 本文作者:HelloGitHub-Anthony HelloGitHub 推出的<讲解开源项目>系列,本期介绍 Python ...

  9. JavaScript版—贪吃蛇小组件

    最近在学习JavaScript,利用2周的时间看完了<JavaScript高级编程>,了解了Js是一门面向原型编程的语言,没有像C#语言中的class,也没有私有.公有.保护等访问限制的级 ...

随机推荐

  1. 虚拟桌面基础架构(VDI)与终端服务和传统PC对比

    VDI(Virtual Desktop Infrastructure),即虚拟桌面基础架构,正迅速成为一个热门词汇,它将颠覆企业向终端用户交付应用的游戏规则.这篇专题就是想通过VDI与两种传统技术的对 ...

  2. Running a Remote Desktop on a Windows Azure Linux VM (远程桌面到Windows Azure Linux )-摘自网络(试了,没成功 - -!)

                              A complete click-by-click, step-by-step video of this article is available ...

  3. linux 系统常用命令

    临时性的完全关闭防火墙,可以不重启机器: #/etc/init.d/iptables status                ##查看防火墙状态 #/etc/init.d/iptable stop ...

  4. 关于ORACLE的硬解析和软解析与MySQL的查询缓存query_cache探讨

    今天在项目中探讨到Oracle对于SQL语句的解析方法以及MySQL相应的处理方法: --------------------------------------------------------- ...

  5. cocos2d-x获得系统的语言

    获得手机系统的语言 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCLabelTTF *label = CCLabe ...

  6. HDU 5762 Teacher Bo (暴力)

    Teacher Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 Description Teacher BoBo is a geogra ...

  7. CodeForces 689B Mike and Shortcuts (bfs or 最短路)

    Mike and Shortcuts 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/F Description Recently ...

  8. java assert的用法简介

    assert的基本用法 assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,如C,C++和Eiffel等,但是支持的形式不尽相同,有的是通过语言本身.有的是通过库 ...

  9. Contest 7.21(贪心专练)

    这一次都主要是贪心练习 练习地址http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26733#overview Problem APOJ 13 ...

  10. Lua学习笔记(三):函数和闭包

    函数 lua的函数以function关键字开始,后跟函数名称和参数,最后以end结束,我们看一个简单的函数定义: function foo() --do something end function ...