当前位置: 首页 > news >正文

使用Javascript来编写贪食蛇(零基础)

 
引用的东西都很基础,注释也很多,这里就不多说了。
  1 <head>
  2 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  3 <title>贪吃蛇</title>
  4 <!--css样式-->
  5 <style type="text/css">
  6     body{font-size:24px; border:none; cursor:pointer;}
  7     #SnakeArea{ width:420px; height:420px; border:#600 solid 2px; margin-top:-15px; margin-left:-10px; background:url(image/23.jpg);}
  8     #Menu{background-image:url(image/40.gif); width:200px; height:410px; border:#90C solid 2px; margin-left:420px; margin-top:-410px; color:#FFF; text-align:center;}
  9     a{ color:#FFF;text-decoration:none;}
 10     .onMouseMove{ text-decoration:underline; font-size:28px; background-color:#90F; border:2px #30F solid;}
 11     .onMouseOut{ text-decoration:none; font-size:24px; border: none;}
 12 </style>
 13 <!--下面是本人使用JavaScript来编写贪吃蛇,课外做的课堂作业,求高手点评出缺点,提出自己的看法意见-->
 14 <script type="text/javascript">
 15 var keyValue;//获取键盘键值
 16 var snakeId = 0;//蛇身体(控件)的id号
 17 var loca = 0;//蛇身(控件)交换的索引
 18 var speed = 500;//蛇移动的速度
 19 var num = 1;//玩家的积分
 20     window.onload = function Lond(){//初始化蛇的位置
 21         var leftPoint = 10;
 22         for(var i=0;i<3;i++){//初始化蛇的长度
 23             var SnakeLond = SnakeBody();
 24             SnakeLond.style.position = "absolute";
 25             SnakeLond.style.top = "100px";
 26             SnakeLond.style.left = leftPoint+"px";
 27             leftPoint += 10;
 28             document.body.appendChild(SnakeLond);//把创建的蛇添加到页面上去
 29         }
 30         Food();//初始化事物
 31     }
 32     function Random(){//获取食物的随机位置
 33         return Math.floor(Math.random()*(40));//生成随机数     
 34     }
 35     function SnakeBody(){//构造一个蛇身并设置其初始的属性值
 36         var SnakeLond = document.createElement("input");
 37         SnakeLond.setAttribute("type","button");//初始类型
 38         SnakeLond.style.width = "20px";
 39         SnakeLond.style.height = "20px";
 40         SnakeLond.setAttribute("id",snakeId);
 41         snakeId++;
 42         return SnakeLond;
 43     }
 44     function Food(){//构造食物方法
 45         var x;
 46         var y;
 47         var SnakeLond = document.createElement("input");//创建食物
 48         SnakeLond.setAttribute("type","button");//食物的类型是button类型
 49         SnakeLond.style.width = "20px";
 50         SnakeLond.style.height = "20px";
 51         SnakeLond.setAttribute("id","food");//id为food
 52         x = Random() * 10;
 53         y = Random() * 10;
 54         SnakeLond.style.position = "absolute";//绝对定位
 55         SnakeLond.style.top = x+"px";
 56         SnakeLond.style.left = y+"px";
 57         SnakeLond.style.background = "blue";
 58         document.body.appendChild(SnakeLond);
 59     }
 60     function $(id){//返回指定id号的实例
 61         return document.getElementById(id);
 62     }
 63     function KeyDown(){//键盘键入事件,获取从键盘输入而得到的键值
 64         if(keyValue == 38 && event.keyCode == 40)
 65             event.keyCode = 38;
 66         else if(keyValue == 40 && event.keyCode == 38)
 67             event.keyCode = 40;
 68         else if(keyValue == 37 && event.keyCode == 39)
 69             event.keyCode = 37
 70         else if(keyValue == 39 && event.keyCode == 37)
 71             event.keyCode = 39;
 72         keyValue = event.keyCode
 73         Stir();//蛇移动
 74         EatFood();//蛇吃食
 75     }
 76     function EatFood(){//吃食方法
 77         var SnakeHead = Head();
 78         var score = $("score");
 79         //var leng = document.getElementsByTagName("input").length-2;
 80         var food = $("food");
 81         var s = SnakeHead.style;
 82         //如果蛇的头部与食物刚好对应的话就表示蛇吃到了食物,蛇的长度和速度就会增加,并且要重置定时器的速度
 83         if(s.top == food.style.top && s.left == food.style.left){
 84             speed -= 30;//速度发生改变
 85             if(speed- 30 <= 30)
 86                 speed = 5;
 87             clearInterval(time);//清除定时器
 88             time = setInterval("Tir()",speed);//重置定时器
 89             score.innerHTML = "积分:"+num;//积分增加
 90             num++;
 91             food.setAttribute("id",snakeId);
 92             var x = parseInt(SnakeHead.style.top);
 93             var y = parseInt(SnakeHead.style.left);
 94             food.style.top = x+"px";//消化食物
 95             food.style.left = y+"px";
 96             snakeId++;
 97             Food();
 98         }
 99     }
100     function SelfEnd(){//蛇自杀方法
101         var SnakeHead = Head();
102         var leng = document.getElementsByTagName("input").length-1;//得到蛇的长度
103         var SnakeItem = document.getElementsByTagName("input");//得到蛇身体所有的部位
104         var headTop = SnakeHead.style;
105         var head = $(SnakeItem.length-2);//得到蛇的头部
106         for(var i=0;i<SnakeItem.length;i++){//循环蛇的每个部位
107             var items = SnakeItem.item(i).style;
108             var id = SnakeItem.item(i).id;
109             //如果蛇的头部与蛇的其它部位相吻合的话就表示蛇咬到了自己
110             if(headTop.top == items.top && headTop.left == items.left && id<leng-2){
111                 clearTimeout(time);
112                 alert("<^GAME ^ OVER^>");//游戏结束
113             }
114         }
115     }
116     function BumpWall(){//蛇撞墙方法
117         var SnakeHead = Head();
118         var s = SnakeHead.style;
119         var top = parseInt(s.top);
120         var left = parseInt(s.left);
121         //如果蛇移动的坐标超过了边界,则蛇撞到了墙,游戏结束
122         if(top < 0 || top >= 410 || left < 0 || left >= 410){
123             clearTimeout(time);
124             alert("<^GAME ^ OVER^>");
125         }
126     }
127     function Stir(){//蛇移动方法
128     var pointx = 0;
129     var pointy = 0;
130         var leng = document.getElementsByTagName("input").length-1;
131         var SnakeHead = document.getElementById(leng-1);
132         var SnakeBody;//申明蛇的身体
133         var leftPoint = SnakeHead.style.left;
134         var topPoint = SnakeHead.style.top;
135         //设置蛇的样式
136         for(var i=0;i<leng;i++){
137             if(i==leng-1)
138                 $(i).style.backgroundColor = "purple";
139             else
140                 $(i).style.backgroundColor = "black";
141         }
142         //蛇根据你按下的上下左右键来进行移动行走
143         if(keyValue == 40){
144             pointy = parseInt(SnakeHead.style.top) + 10;
145             pointx = parseInt(SnakeHead.style.left);
146         }
147         else if(keyValue == 38){
148             pointy = parseInt(SnakeHead.style.top) - 10;
149             pointx = parseInt(SnakeHead.style.left);
150         }
151         else if(keyValue == 39){
152             pointx = parseInt(SnakeHead.style.left) + 10;
153             pointy = parseInt(SnakeHead.style.top);
154         }
155         else if(keyValue == 37){
156             pointx = parseInt(SnakeHead.style.left) - 10;
157             pointy = parseInt(SnakeHead.style.top);
158         }
159         else{
160             pointx = parseInt(SnakeHead.style.left) + 10;
161             pointy = parseInt(SnakeHead.style.top);
162         }
163         SnakeBody = $(loca);//得到蛇的各个身体
164         SnakeBody.style.left = leftPoint;
165         SnakeBody.style.top = topPoint;
166         loca++;
167         if(loca == leng-1)
168             loca = 0;
169         SnakeHead.style.left = pointx + "px";//蛇按照指定方向走动
170         SnakeHead.style.top = pointy + "px";
171         var snakeSpeed = $("speed");//用来记录蛇的坐标
172         snakeSpeed.innerHTML = "坐标:<br/>"+"X "+pointx+","+"Y "+pointy;
173         BumpWall();//调用蛇撞墙方法
174         SelfEnd();//调用蛇自杀方法
175     }
176     function Head(){//返回蛇的头部
177         var leng = document.getElementsByTagName("input").length-1;//蛇的长度
178         return document.getElementById(leng-1);//蛇的头部
179     }
180     function Pause(){//暂停方法
181         alert("暂停中......");
182     } 
183     function Tir(){//计时器方法
184         Stir();
185         EatFood();
186     }
187     function onMouseMove(id){//鼠标移到指定选项的方法
188         var p = $(id);
189         p.className = "onMouseMove";
190     }
191     function onMouseOut(id){//鼠标移开指定选项的方法
192         var p = $(id);
193         p.className = "onMouseOut";
194     }
195     var time = setInterval("Tir()",speed);//定时器
196 </script>
197 </head>
198 
199 <body οnkeydοwn="KeyDown()">
200     <div id="SnakeArea">
201     </div>
202     <!--游戏菜单-->
203     <div id="Menu">
204         <p style="color:#FF0;">游戏菜单</p>
205         <a href="Snake.html" id="start" onMouseMove="onMouseMove('start')" onMouseOut="onMouseOut('start')">重新开始</a>
206         <br/>
207         <p id="speed" onMouseMove="onMouseMove('speed')" onMouseOut="onMouseOut('speed')">坐标</p>
208         <p id="score" onMouseMove="onMouseMove('score')" onMouseOut="onMouseOut('score')">积分</p>
209         <p id="pause" onClick="Pause()" onMouseMove="onMouseMove('pause')" onMouseOut="onMouseOut('pause')">暂停</p>
210         <p id="end" onClick="javascript:window.close()" onMouseMove="onMouseMove('end')" onMouseOut="onMouseOut('end')">结束游戏</p>
211     </div>
212 </body>
213 </html>
View Snake

 

转载于:https://www.cnblogs.com/LiuZhen/p/3437380.html

相关文章:

  • 使用 JMeter 完成常用的压力测试
  • 内连接和外连接
  • 阿里丁烨看过程改进:如何提高被改进团队积极性
  • MySQL 性能监控4大指标——第一部分
  • 运行yum报错:No module named yum
  • 如何在Word中插入几何画板图形
  • jQuery().end()的内部实现及源码分析
  • 应用生命周期终极 DevOps 工具包
  • ASP.NET项目与IE10、IE11不兼容的解决办法
  • Selenium webdriver 操作日历控件
  • Qt一步一步实现插件调用(附源码)
  • 如何提高Linux下块设备IO的整体性能?
  • 演示:取证分析IPV6组播地址与MAC地址的映射关系
  • 类的运用(一)
  • ODI中通过配置表和自定义逆向工程获取数据库信息
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 230. Kth Smallest Element in a BST
  • CSS魔法堂:Absolute Positioning就这个样
  • django开发-定时任务的使用
  • Docker 笔记(2):Dockerfile
  • magento2项目上线注意事项
  • Phpstorm怎样批量删除空行?
  • Python进阶细节
  • spring boot 整合mybatis 无法输出sql的问题
  • uva 10370 Above Average
  • 关于使用markdown的方法(引自CSDN教程)
  • 前端之React实战:创建跨平台的项目架构
  • 区块链技术特点之去中心化特性
  • 如何在GitHub上创建个人博客
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 微信小程序--------语音识别(前端自己也能玩)
  • 物联网链路协议
  • 消息队列系列二(IOT中消息队列的应用)
  • 自制字幕遮挡器
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​业务双活的数据切换思路设计(下)
  • ​一些不规范的GTID使用场景
  • #includecmath
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (初研) Sentence-embedding fine-tune notebook
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (剑指Offer)面试题34:丑数
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (转)C#调用WebService 基础
  • (转)Scala的“=”符号简介
  • (转)大道至简,职场上做人做事做管理
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .Net 代码性能 - (1)
  • .NET6实现破解Modbus poll点表配置文件