首页 > 语言 > JavaScript > 正文

javascript实现简单的贪吃蛇游戏

2024-05-06 16:17:52
字体:
来源:转载
供稿:网友

本文很简单,给大家分享了一段使用javascript实现简单的贪吃蛇游戏的代码,算是对自己学习javascript的一次小小的总结,代码参考了网友的部分内容,推荐给大家,希望对大家能够有所帮助。

javascript实现简单的贪吃蛇游戏,功能很简单,代码也很实用,就不多废话了,小伙伴们参考注释吧。

 

 
  1. <html> 
  2. <head> 
  3. <meta http-equiv='content-type' content='text/html;charset=utf-8'
  4. <title>贪吃蛇</title> 
  5. <script type="text/javascript"
  6. var map; //地图 
  7. var snake; //蛇 
  8. var food; //食物 
  9. var timer; //定时器 
  10. var initSpeed=200; //初始定时器时间间隔(毫秒),间接代表蛇移动速度 
  11. var nowSpeed=initSpeed; //游戏进行时蛇移动速度 
  12. var grade=0; //积分 
  13. var flag=1; //(可间接看做)关卡 
  14. //地图类 
  15. function Map(){ 
  16. this.width=800; 
  17. this.height=400; 
  18. this.position='absolute'
  19. this.color='#EEEEEE'
  20. this._map=null
  21. //生成地图 
  22. this.show=function(){ 
  23. this._map=document.createElement('div'); 
  24. this._map.style.width=this.width+'px'
  25. this._map.style.height=this.height+'px'
  26. this._map.style.position=this.position; 
  27. this._map.style.backgroundColor=this.color; 
  28. document.getElementsByTagName('body')[0].appendChild(this._map); 
  29. //食物类 
  30. function Food(){ 
  31. this.width=20; 
  32. this.height=20; 
  33. this.position='absolute'
  34. this.color='#00FF00'
  35. this.x=0; 
  36. this.y=0; 
  37. this._food; 
  38. //生成食物 
  39. this.show=function(){ 
  40. this._food=document.createElement('div'); 
  41. this._food.style.width=this.width+'px'
  42. this._food.style.height=this.height+'px'
  43. this._food.style.position=this.position; 
  44. this._food.style.backgroundColor=this.color; 
  45. this.x=Math.floor(Math.random()*map.width/this.width); 
  46. this.y=Math.floor(Math.random()*map.height/this.width); 
  47. this._food.style.left=this.x*this.width; 
  48. this._food.style.top=this.y*this.height; 
  49.  
  50. map._map.appendChild(this._food); 
  51. //蛇类 
  52. function Snake(){ 
  53. this.width=20; 
  54. this.height=20; 
  55. this.position='absolute'
  56. this.direct=null;//移动方向 
  57. //初始蛇身 
  58. this.body=new Array( 
  59. [3,2,'red',null],//蛇头 
  60. [2,2,'blue',null], 
  61. [1,2,'blue',null
  62. ); 
  63. //生成蛇身 
  64. this.show=function(){ 
  65. for(var i=0;i<this.body.length;i++){ 
  66. if(this.body[i][3]==null){ 
  67. this.body[i][3]=document.createElement('div'); 
  68. this.body[i][3].style.width=this.width; 
  69. this.body[i][3].style.height=this.height; 
  70. this.body[i][3].style.position=this.position; 
  71. this.body[i][3].style.backgroundColor=this.body[i][2]; 
  72. map._map.appendChild(this.body[i][3]); 
  73. this.body[i][3].style.left=this.body[i][0]*this.width+'px'
  74. this.body[i][3].style.top=this.body[i][1]*this.height+'px'
  75. //控制蛇移动 
  76. this.move=function(){ 
  77.  
  78. var length=this.body.length-1; 
  79. for(var i=length;i>0;i--){ 
  80. this.body[i][0]=this.body[i-1][0]; 
  81. this.body[i][1]=this.body[i-1][1]; 
  82.  
  83. switch(this.direct){ 
  84. case 'right'
  85. this.body[0][0]=this.body[0][0]+1; 
  86. break
  87. case 'left'
  88. this.body[0][0]=this.body[0][0]-1; 
  89. break
  90. case 'up'
  91. this.body[0][1]=this.body[0][1]-1; 
  92. break
  93. case 'down'
  94. this.body[0][1]=this.body[0][1]+1; 
  95. break
  96.  
  97. this.condition(); 
  98. this.show(); 
  99. //定时器,开始游戏时,调用 
  100. this.speed=function(){ 
  101. timer=setInterval('snake.move()',initSpeed); 
  102. //条件处理 
  103. this.condition=function(){ 
  104. //吃食物 
  105. if(this.body[0][0]==food.x&&this.body[0][1]==food.y){ 
  106. grade++; 
  107. this.body[[this.body.length]]=[0,0,'blue',null]; 
  108. map._map.removeChild(food._food) 
  109. food.show(); 
  110. //判断是否撞墙 
  111. if(this.body[0][0]<0||this.body[0][0]>=map.width/this.width||this.body[0][1]<0||this.body[0][1]>=map.height/this.height){ 
  112. alert('game over'); 
  113. clearInterval(timer); 
  114. return ; 
  115. //判断是否撞到自身 
  116. for(var i=1;i<this.body.length;i++){ 
  117. if(this.body[0][0]==this.body[i][0]&&this.body[0][1]==this.body[i][1]){ 
  118. alert('game over'); 
  119. clearInterval(timer); 
  120. return ; 
  121. //速度提升处理,积分每曾2分,速度提升一倍 
  122. if(grade/2==flag){ 
  123. clearInterval(timer); 
  124. flag++; 
  125. nowSpeed=initSpeed/flag; 
  126. timer=setInterval('snake.move()',nowSpeed); 
  127. document.title='贪吃蛇 积分'+grade+' 速度等级'+initSpeed/nowSpeed; 
  128.  
  129.  
  130. document.onkeydown=function(event){ 
  131. //按下任意键,开始游戏 
  132. if(snake.direct===null){ 
  133. snake.direct='right'
  134. snake.speed(); 
  135. //控制方向,W S D A分别代表 上下右左 
  136. switch(window.event?window.event.keyCode:event.keyCode){//浏览器兼容处理 
  137. case 87 : 
  138. snake.direct=snake.body[0][0]==snake.body[1][0]?snake.direct:'up';//避免反向移动,触发死亡bug 
  139. break
  140. case 83 : 
  141. snake.direct=snake.body[0][0]==snake.body[1][0]?snake.direct:'down'
  142. break
  143. case 68 : 
  144. snake.direct=snake.body[0][1]==snake.body[1][1]?snake.direct:'right'
  145. break
  146. case 65 : 
  147. snake.direct=snake.body[0][1]==snake.body[1][1]?snake.direct:'left'
  148. break
  149. //自动加载游戏 
  150. window.onload=function(){ 
  151. map=new Map(); 
  152. map.show(); 
  153. food=new Food(); 
  154. food.show(); 
  155. snake=new Snake(); 
  156. snake.show(); 
  157.  
  158. </script> 
  159. </head> 
  160. <body> 
  161. </body> 
  162. </html> 

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选