JavaScript实现的--贪吃蛇

总的实现思路:

      一、效果部分:

        1、编写html代码,加上样式。     

      二、JavaScript部分:  

        1.利用dom方法创建一块草坪,即活动区域;

          2.创建一条蛇,并设置其初始位置;

               3.创建一个随机出现的食物;

         4. 最后编写移动函数: 头部移动;

                  吃掉食物后自身长度加长;

                  考虑它头部遇到墙壁和头部与自身相撞的情况;

         5.编写按键操作环节、给按钮加点击事件。

HTML代码如下:

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title>贪吃蛇</title>
 6 </head>
 7 <body>
 8     <div id="container">
 9         <!-- 活动范围 -->
10         <div id="ground"></div>
11         <!-- 控制区 -->
12         <div id="gameControl">
13             <div id="button">
14                 <button id="start">开始</button>
15                 <button id="pause">暂停</button>
16             </div>
17         </div>
18     </div>
19 </body>

CSS代码如下:

 1  *{
 2             margin: 0;
 3             padding: 0;
 4         }
 5         body { background: #aaa; }
 6         #container{
 7             width: 1000px;
 8             height: 550px;
 9             border: 30px solid #003040;
10             margin: 11px auto;
11             background: #000;
12         }
13         #ground{
14             width: 1000px;
15             height: 500px;
16             position: relative;
17         }
18         #button{
19             float: right;
20             height: 50px;
21             line-height: 50px;
22             margin-right: 350px;
23         }
24         button{
25             width: 85px;
26             height: 40px;
27             cursor: pointer;
28             background: #2D8DDA;
29             color: #fff;
30             font-size: 15px;
31             border: none;
32             margin: 0 30px;
33         }
34         .block{
35             width: 20px;
36             height: 20px;
37             background: #f1f1f1;
38             float: left;
39
40         }
41         .snakeBody{
42             width: 20px;
43             height: 20px;
44             position: absolute;
45             background: #000;
46         }
47         .food{
48             width: 20px;
49             height: 20px;
50             background: #00D936;
51             position: absolute;
52         }

JS代码如下:

  1     var timer, diRection=‘right‘;
  2     window.onload=function(){
  3         //初始化
  4         createGrass();
  5         createSnake();
  6         createFood();
  7         document.getElementById(‘start‘).onclick=function(){
  8             clearInterval(timer);  //清空,防止多次点击开始
  9             timer=setInterval(function(){
 10                 snakeMove(diRection);
 11             },150);
 12             snakeMove(diRection);
 13         };
 14         document.getElementById(‘pause‘).onclick=function(){
 15             clearInterval(timer);
 16         };
 17     };
 18     //创建草坪
 19     function createGrass(){
 20         var oGround=document.getElementById(‘ground‘);
 21         var oDiv;
 22         for(var i=0;i<50;i++){
 23            for(var j=0;j<25;j++){
 24                 oDiv=document.createElement(‘div‘);
 25                 oDiv.className=‘block‘;
 26                 oGround.appendChild(oDiv);
 27            }
 28        }
 29     }
 30     //创建蛇
 31
 32     function createSnake(){
 33         var oGround=document.getElementById(‘ground‘);
 34         var oDiv;
 35         for(var i=0;i<2;i++){
 36             oDiv=document.createElement(‘div‘);
 37             oDiv.className=‘snakeBody‘;
 38             oDiv.style.right=(48-i)*20+‘px‘;
 39             oDiv.style.top=‘20px‘;
 40             oGround.appendChild(oDiv);
 41             snakeBody.push(oDiv);
 42         }
 43     }
 44
 45     //创建食物
 46     var snakeBody=[], oFood;
 47
 48     function createFood(){
 49         var flag = true;  //初始化食物和蛇身不重合
 50         var iLeft, iTop;
 51         var oGround = document.getElementById(‘ground‘);
 52         oFood = document.createElement(‘div‘);
 53         oFood.className=‘food‘;
 54         iLeft = parseInt(Math.random()*49)*20; // 为食物块出现的位置取一个随机数(取整数)。
 55         iTop = parseInt(Math.random()*24)*20;
 56         var len = snakeBody.length;
 57         for(var i=0; i<len; i++){   //确定蛇身是否与出现的食物位置重合
 58             if(snakeBody[i].offsetLeft==iLeft && snakeBody[i].offsetTop==iTop){
 59                 flag=false;
 60                 break;
 61             }
 62         }
 63         if(flag==true){
 64             oFood.style.left=iLeft+‘px‘;
 65             oFood.style.top=iTop+‘px‘;
 66             oGround.appendChild(oFood);
 67         } else {
 68             createFood();  //若生成的食物有重合则再次调用自身
 69         }
 70     }
 71     //蛇运动
 72     function snakeMove(direction){
 73         var snakeHead = snakeBody[0];              //获取蛇头
 74         diRection = direction;                    //用于防止比如蛇身本来往左边走,但是向右按钮仍然有效的情况
 75         for(var i = snakeBody.length-1; i>0; i--){
 76             snakeBody[i].style.left=snakeBody[i-1].offsetLeft+‘px‘; //移动蛇
 77             snakeBody[i].style.top=snakeBody[i-1].offsetTop+‘px‘;
 78         }
 79         switch (direction){  //蛇头的位置
 80             case ‘left‘: snakeHead.style.left = snakeHead.offsetLeft-20+‘px‘; break;
 81             case ‘right‘: snakeHead.style.left = snakeHead.offsetLeft+20+‘px‘; break;
 82             case ‘up‘: snakeHead.style.top = snakeHead.offsetTop-20+‘px‘; break;
 83             case ‘down‘: snakeHead.style.top = snakeHead.offsetTop+20+‘px‘; break;
 84         }
 85
 86         //蛇头碰到墙壁
 87         if(snakeHead.offsetLeft == -20 || snakeHead.offsetLeft == 1000 || snakeHead.offsetTop == -20 || snakeHead.offsetTop == 500){
 88             clearInterval(timer);
 89             if(confirm(‘再来一次?‘)){
 90                 window.location.reload();
 91             }
 92         }
 93         //蛇碰到自身
 94         for(var j=1;j<snakeBody.length;j++){
 95             if(snakeHead.offsetLeft == snakeBody[j].offsetLeft && snakeHead.offsetTop == snakeBody[j].offsetTop){
 96                 clearInterval(timer);
 97                 if(confirm(‘再来一次‘)){
 98                     window.location.reload();
 99                 }
100             }
101         }
102         //吃掉食物
103         if(snakeHead.offsetLeft == oFood.offsetLeft && snakeHead.offsetTop == oFood.offsetTop){
104             oFood.className = ‘snakeBody snake-block‘;  //食物变成和蛇身一样的颜色
105             console.log(snakeBody[snakeBody.length-1].offsetTop);  //console.log 用于输出普通信息
106             switch (direction){                         //oFood的坐标采用蛇身最后一节的坐标
107                 case ‘left‘: oFood.style.left = snakeBody[snakeBody.length-1].offsetLeft+‘px‘; break;
108                 case ‘right‘: oFood.style.left = snakeBody[snakeBody.length-1].offsetLeft+‘px‘; break;
109                 case ‘up‘: oFood.style.top = snakeBody[snakeBody.length-1].offsetTop+‘px‘; break;
110                 case ‘down‘: oFood.style.top = snakeBody[snakeBody.length-1].offsetTop+‘px‘; break;
111             }
112             snakeBody.push(oFood);
113             //用push把吃掉的div添加到蛇尾
114             //不能添加到头部,因为如果食物节出现在边缘位置,那么吃掉后会超出墙范围或者直接撞墙
115             createFood();
116         }
117     }
118     /*
119      * onkeydown()
120      * 事件会在用户按下一个键盘按键时发生。
121      * 参数                            描述
122      * SomeJavaScriptCode  必需。      规定该事件发生时执行的 JavaScript。
123      */
124     //按键操作
125     document.onkeydown = function(e){
126         var event = e || window.event;  //实现所有浏览器兼容,获取事件对象
127         var direction = event.keyCode;
128         switch (direction){
129             case 37:
130                 if(diRection != ‘right‘){
131                     snakeMove(‘left‘);
132                 }
133             break;  //左
134             case 39:
135                 if(diRection != ‘left‘){
136                     snakeMove(‘right‘);
137                 }
138             break;  //右
139             case 38:
140                 if(diRection != ‘down‘){
141                     snakeMove(‘up‘);
142                 }
143             break;  //上
144             case 40:if(diRection != ‘up‘){
145                 snakeMove(‘down‘);
146             }
147             break;  //下
148         }
149     }

常用的方法:

/*
* onkeydown()
* 事件会在用户按下一个键盘按键时发生。
* 参数 描述
* SomeJavaScriptCode 必需。 规定该事件发生时执行的 JavaScript。
*/

/*
*confirm(message) 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框。
*
* 参数 描述
* message 要在 window 上弹出的对话框中显示的纯文本(而非 HTML 文本)
*
*如果用户点击确定按钮,则 confirm() 返回 true。如果点击取消按钮,则 confirm() 返回 false。
*
*在用户点击确定按钮或取消按钮把对话框关闭之前,它将阻止用户对浏览器的所有输入。在调用 confirm() 时,
*将暂停对 JavaScript 代码的执行,在用户作出响应之前,不会执行下一条语句。
*
*/

/* offsetLeft属性 :
* 此属性可以返回当前元素距离某个父辈元素左边缘的距离,当然这个父辈元素也是有讲究的。
* 1.如果父辈元素中有定位的元素,那么就返回距离当前元素最近的定位元素边缘的距离。
* 2.如果父辈元素中没有定位元素,那么就返回相对于body左边缘距离。

效果图:
*/

时间: 2024-08-13 14:29:24

JavaScript实现的--贪吃蛇的相关文章

javascript之【贪吃蛇系列】第一弹:简单的贪吃蛇实现

参考博客:http://blog.csdn.net/sunxing007/article/details/4187038 以上博客是参考,毕竟第一次做,真让自己盲人摸象做不出来. 不过我在其上做了一些改进,界面等效果看起来更好一些. 下图是在Chrome上运行的效果,但是火狐和IE会不兼容,onkeydown事件不能正确调用 这里用了一张图把贪吃蛇制作过程的思想画了出来,画的有点简陋: 下面就是把代码发上来,上边有详细的解释: <html> <head> <title>

JavaScript实现简单贪吃蛇小游戏

之前上Web课,学到JavaScript的时候,老师要求写几个静态页面,要用到JavaScript.想了想就写个贪吃蛇吧.其实之前用pygame写过一次GUI的贪吃蛇,素材都是自己拿画图画的,其丑无比.所以这次还是老老实实用字符吧. 首先,是一些全局变量的定义: 1 <script> 2 var state = 0;//0 wait 1 run 2 over 3 var width = 40; 4 var height = 25; 5 var update = false; 6 var dir

javascript实现游戏贪吃蛇

1.设计蛇:属性有宽.高.方向.状态(有多少节),方法:显示,跑 2.设计食物:属性宽.高 3.显示蛇:根据状态向地图里加元素 4.蛇跑起来:下一节到前一节的位置,蛇头根据方向变,删除原来的蛇,新建蛇:当出界时,死亡,初始化:当蛇头吃到自己的时候,死亡,初始化 5.食物被吃掉,蛇加一节,去掉原来的食物,生成新的食物 6.添加定时器,绑定按键 <!doctype html> <html lang="en"> <head> <meta charse

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

js代码: 游戏的对象 ,食物,蛇 ,游戏控制思路如下 (完整代码在https://github.com/774044859yf/ObjectSnakeGame下载) var snake = { aSnake: [],//添加蛇的数组 size: 20,//蛇的大小,每块身体的size top: 200,//初始位置 left: 400,//初始位置 speed: 250,//初始速度 level: 1,//初始游戏等级 len: 3,//蛇身长度默认3个单位 direction: 'left'

贪吃蛇 javaScript 谷歌浏览器浏览

1.代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Conten

JavaScript与html5写的贪吃蛇完整代码

JavaScript与html5写的贪吃蛇完整代码 查看运行效果可访问http://www.codesocang.com/texiao/youxitexiao/2014/0402/7045.html# <!doctype html><html lang="en"><head><meta charset="utf-8"><title>js网页版的贪吃蛇游戏</title><style typ

javascript实现贪吃蛇

<html> <head> <style> body { background:#444; } .rect { border:1px solid #94F; width:680px; height:680px; } .gridred { width:38px; height:38px; background:red; border:1px #555 solid; float:left } .gridgreen { width:38px; height:38px; bac

javascript -- (贪吃蛇游戏)

界面设置 /***body**/ <body> <h1>贪吃蛇游戏</h1> /***score记录成绩**/ <p id="score">0</p> /***地图**/ <div id="snake_map"> /***地图的绘制通过js实现**/ </div> /***三个按钮**/ <div class = "box"> <button t

使用javascript实现贪吃蛇游戏

当自己用代码实贪吃蛇游戏时,是很有成就感的一件事情.同时在写的过程中也是自己对javascript基本语法的复习与体会. 以下就是代码以及一些代码注释:(bug是有的,浏览器的兼容性,本人的能力无法解决) <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content=&quo