当前位置:   article > 正文

贪吃蛇(js)_贪吃蛇js

贪吃蛇js

 

思想:

1、设计蛇:属性有宽、高、方向、状态(有多少节),方法:显示,跑

2、设计食物:属性宽、高

3、显示蛇:根据状态向地图里加元素

4、蛇跑起来:下一节到前一节的位置;当出界时,死亡;当蛇头吃到自己的时候,死亡

5、食物被吃掉,蛇加一节,去掉原来的食物,生成新的食物

6、添加定时器,绑定按键

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>贪吃蛇</title>
  8. </head>
  9. <style>
  10. *{
  11. margin: 0px;
  12. padding: 0px;
  13. }
  14. h3{
  15. margin-top: 10px;
  16. }
  17. .bt3{
  18. margin-left: 10px;
  19. }
  20. #map{
  21. width: 500px;
  22. height: 500px;
  23. background-color: pink;
  24. /* 相对定位 */
  25. position: relative;
  26. }
  27. table{
  28. /* 绝对定位 */
  29. position: absolute;
  30. top: 56.5px;
  31. left: -2px;
  32. }
  33. td{
  34. width: 48px;
  35. height: 48px;
  36. }
  37. </style>
  38. <body>
  39. <h3 id="score">Score:0</h3>
  40. <div class="bts">
  41. <button id="fast"></button>
  42. <button id="Moderato"></button>
  43. <button id="slow"></button>
  44. </div>
  45. <!-- 粉色的地图区域 规定map的大小-->
  46. <div id="map">
  47. </div>
  48. </body>
  49. <script>
  50. //完成基本的显示内容
  51. //1.地图 和基本按钮的显示 绘制表格
  52. //利用js完成一个1010列表格,每一个表格单元格大小 50*50
  53. //通过document.write("进行编写") //网页输出
  54. // border='1'边框增加1 cellspacing='0'边框之间的间距为0
  55. document.write("<table border='1' cellspacing='0'>")
  56. //内部需要10个tr标签 写一个10次循环 每循环一次产生一组tr标签
  57. for(var i = 0;i<10;i++){
  58. document.write("<tr>")
  59. //十个td ,再来一个循环
  60. for(var n = 0;n<10;n++){
  61. document.write("<td></td>")
  62. }
  63. document.write("</tr>")
  64. }
  65. document.write("</table>")
  66. //2.产生红色蛇头 以及 蓝色事物
  67. //封装 一个产生div标签的函数,根据传入参数确定对应的背景色
  68. function createDiv(color){
  69. //创建一个 div标签,宽度50 高度50 ,背景色color,如何对应div的位置随机产生,
  70. //任意定义位置 改变定位属性的left,top来实现对应的位置调整
  71. var div = document.createElement("div")
  72. div.style.width="50px"
  73. div.style.height="50px"
  74. div.style.backgroundColor=color
  75. //给创建出来的div添加一个 绝对定位属性
  76. div.style.position="absolute"
  77. //使用随机数的概念来 随机产生对应的位置
  78. // //Math.random() 0-1随机数 小数
  79. // //发现lefttop必须为50的整数倍 ,0-9
  80. // //产生一个0-9随机数,*50
  81. div.style.top=parseInt(Math.random()*10)*50+"px"
  82. div.style.left=parseInt(Math.random()*10)*50+"px"
  83. var map = document.getElementById("map")
  84. map.appendChild(div)
  85. return div
  86. }
  87. var head = createDiv("red")
  88. //需要head添加一个方向属性
  89. head.direction="左"
  90. var food = createDiv("blue")
  91. //点击按钮时,让蛇头默认情况下 ,自动的向左侧移动,每一次移动50px
  92. //点击三个不同的按钮时,启动对应的定时器
  93. var fast = document.getElementById("fast")
  94. var Moderato = document.getElementById("Moderato")
  95. var slow = document.getElementById("slow")
  96. var t
  97. var bodyNode=[]
  98. var s = 0//分数
  99. //js具有两个变量的作用域:1.全局 2.局部在函数内部定义的变量只在函数内部生效
  100. fast.onclick=function(){
  101. window.t =setInterval(move, 200);
  102. }
  103. Moderato.onclick=function(){
  104. window.t = setInterval(move, 400);
  105. }
  106. slow.onclick=function(){
  107. window.t = setInterval(move, 700);
  108. }
  109. function move (){
  110. //身体移动
  111. //永远跟随前一块的移动
  112. if(bodyNode.length>0){
  113. for(var n = bodyNode.length-1;n >= 0;n--){
  114. //判断当前的每一块身体是否和head重合 ,如果重合证明咬到了身体,停止定时器
  115. if(bodyNode[n].style.left == head.style.left&&bodyNode[n].style.top == head.style.top){
  116. alert("咬到身体了")
  117. clearInterval(window.t)
  118. }
  119. switch(bodyNode[n].direction){
  120. case "左":
  121. var l=parseInt(bodyNode[n].style.left)
  122. bodyNode[n].style.left=l-50+"px"
  123. break
  124. case "右":
  125. var l=parseInt(bodyNode[n].style.left)
  126. bodyNode[n].style.left=l+50+"px"
  127. break
  128. case "上":
  129. var t=parseInt(bodyNode[n].style.top)
  130. bodyNode[n].style.top=t-50+"px"
  131. break
  132. case "下":
  133. var t=parseInt(bodyNode[n].style.top)
  134. bodyNode[n].style.top=t+50+"px"
  135. break
  136. }
  137. if(n==0){
  138. bodyNode[n].direction= head.direction
  139. }else{
  140. bodyNode[n].direction=bodyNode[n-1].direction
  141. }
  142. }
  143. }
  144. //头部移动
  145. switch(head.direction){
  146. case "左":
  147. var l = parseInt(head.style.left)
  148. head.style.left = l-50+"px"
  149. break
  150. case "右":
  151. var l = parseInt(head.style.left)
  152. head.style.left = l+50+"px"
  153. break
  154. case "上":
  155. var t = parseInt(head.style.top)
  156. head.style.top = t-50+"px"
  157. break
  158. case "下":
  159. var t = parseInt(head.style.top)
  160. head.style.top = t+50+"px"
  161. break
  162. }
  163. //检测是否和食物发生了对应的碰撞
  164. //如何判断碰撞 两个的元素位置完全相同 ,left==left top==top
  165. if(food.style.top == head.style.top && food.style.left == head.style.left){
  166. //产生一个黄色身体,当前贪吃蛇身体最后一块的后方
  167. //明确谁是最后一块,操作每一块身体 bodyNodes
  168. var body = createDiv("yellow")
  169. //目前位置随机,跟在最后一块后面
  170. //找到当前的最后一块
  171. //数组中的最后一个内容,数组中如果是空? 蛇头是最后一块
  172. var lastNode
  173. if(bodyNode.length==0){
  174. lastNode = head
  175. }else{
  176. lastNode = bodyNode[bodyNode.length-1]
  177. }
  178. //body的位置要规矩当前最后一块的移动方向来决定
  179. switch(lastNode.direction){
  180. case "上":
  181. body.style.left=lastNode.style.left
  182. body.style.top=parseInt(lastNode.style.top)+50+"px"
  183. break
  184. case "下":
  185. body.style.left=lastNode.style.left
  186. body.style.top=parseInt(lastNode.style.top)-50+"px"
  187. break
  188. case "左":
  189. body.style.top=lastNode.style.top
  190. body.style.left=parseInt(lastNode.style.left)+50+"px"
  191. break
  192. case "右":
  193. body.style.top=lastNode.style.top
  194. body.style.left=parseInt(lastNode.style.left)-50+"px"
  195. break
  196. }
  197. //新产生的身体 移动方向 最后一块的移动方向保持一致
  198. body.direction = lastNode.direction
  199. //将新产生的身体放入数组中
  200. bodyNode.push(body)
  201. //将新产生的身体放入数组中
  202. food.style.top=parseInt(Math.random()*10)*50+"px"
  203. food.style.left=parseInt(Math.random()*10)*50+"px"
  204. //分数增加
  205. var score = document.getElementById("score")
  206. s+=1
  207. score.innerHTML="Score:"+s
  208. }
  209. //死亡检测 判断蛇头是否跑出题图
  210. //蛇头从左侧跑出地图
  211. if(parseInt(head.style.left)>500||parseInt(head.style.left)<0||parseInt(head.style.top)<0||parseInt(head.style.top)>500){
  212. alert("撞墙死亡")
  213. clearInterval(window.t)
  214. }
  215. }
  216. //按键控制div的移动方向
  217. document.onkeydown=function(event){
  218. switch(event.keyCode){
  219. case 37:
  220. head.direction="左"
  221. break
  222. case 38:
  223. head.direction="上"
  224. break
  225. case 39:
  226. head.direction="右"
  227. break
  228. case 40:
  229. head.direction="下"
  230. }
  231. }
  232. </script>
  233. </html>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/1001454
推荐阅读
相关标签
  

闽ICP备14008679号