CODE:
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  4. <style type="text/css">
  5. .snake{ background:#090}
  6. .food0{ background:#f90}
  7. .food1{ background:#f00}
  8. .bar{ background:#000}
  9. #state{ color:#090; font-weight:bold}
  10. </style>
  11. <script type="text/javascript">
  12. var rows = 16;
  13. var cells = 30;
  14. var squareWidth = 20;
  15. var speed = 5000;
  16. var borderWidth = 5;
  17. var times = 200;//0.2
  18. var start = 0;
  19. var pause = 0;
  20. var sUp;
  21. window.onload = function createMap()
  22. {
  23. mapWidth = eval(cells*squareWidth+2*borderWidth);
  24. mapHeight = eval(rows*squareWidth+2*borderWidth);
  25. mapLeft = (document.body.clientWidth-mapWidth)/2;
  26. mapTop = (document.body.clientHeight-mapHeight)/2;
  27. document.body.innerHTML += "<div id=\"map\" style=\"position:absolute; left:" + mapLeft + "px; top:" + mapTop + "px; width:" + mapWidth + "px; height:" + mapHeight + "px; border:" + borderWidth + "px solid #789;\"></div>";
  28. gameMap = new Array()
  29. for(y=0;y<rows;y++)
  30. {
  31. gameMap[y]=new Array();
  32. for(x=0;x<cells;x++)
  33. {
  34. gameMap[y][x]='0';
  35. }
  36. }
  37. snakeX = parseInt(Math.random()*cells);
  38. snakeY = parseInt(Math.random()*rows);
  39. createSnake();
  40. createFood();
  41. createBar();
  42. snakeDIV = map.all.tags("DIV");
  43. }
  44. function createSnake()//创建蛇
  45. {
  46. map.innerHTML += "<div x=\"" + snakeX + "\" y=\"" + snakeY + "\" style=\"position:absolute; left:" + snakeX * squareWidth + "px; top:" + snakeY * squareWidth + "px; width:" + squareWidth + "px; height:" + squareWidth + "px; overflow:hidden;\" class=\"snake\"></div>";
  47. gameMap[snakeY][snakeX]='s';
  48. }
  49. function createFood()//创建食物
  50. {
  51. foodX = parseInt(Math.random() * cells);
  52. foodY = parseInt(Math.random() * rows);
  53. if(gameMap[foodY][foodX]=='0')
  54. {
  55. map.innerHTML += "<span id=\"food\" style=\"position:absolute; left:" + foodX * squareWidth + "; top:" + foodY * squareWidth + "; width:" + squareWidth + "; height:" + squareWidth +"; overflow:hidden;\" class=\"food" + parseInt(Math.random() * 2) + "\"></span>"
  56. gameMap[foodY][foodX]='f';
  57. }
  58. else
  59. {
  60. createFood();
  61. }
  62. }
  63. function createBar()//创建障碍物
  64. {
  65. barX = parseInt(Math.random() * cells);
  66. barY = parseInt(Math.random() * rows);
  67. if(gameMap[barY][barX]=='0')
  68. {
  69. map.innerHTML += "<span id=\"bar\" style=\"position:absolute; left:" + barX * squareWidth + "; top:" + barY * squareWidth + "; width:" + squareWidth + "; height:" + squareWidth +"; overflow:hidden;\" class=\"bar\"></span>"
  70. gameMap[barY][barX]='b';
  71. }
  72. else
  73. {
  74. createBar();
  75. }
  76. }
  77. document.onkeydown = function keyDown(){
  78. key = event.keyCode;
  79. switch(key)
  80. {
  81. case 37://左
  82. snakeGo(-1,0);
  83. document.getElementById("state").innerHTML = "左行";
  84. break;
  85. case 39://右
  86. snakeGo(1,0);
  87. document.getElementById("state").innerHTML = "右行";
  88. break;
  89. case 38://上
  90. snakeGo(0,-1);
  91. document.getElementById("state").innerHTML = "上行";
  92. break;
  93. case 40://下
  94. snakeGo(0,1);
  95. document.getElementById("state").innerHTML = "下行";
  96. break;
  97. case 32://空格键
  98. if(start == 1)
  99. {
  100. pause = 1;
  101. document.getElementById("state").innerHTML += "(暂停)";
  102. clearTimeout(sUp);
  103. }
  104. break;
  105. }
  106. return false;
  107. }
  108. function snakeGo(x,y)
  109. {
  110. goX = x;
  111. goY = y;
  112. if(start == 0)
  113. {
  114. speedUp();
  115. start = 1;
  116. move();
  117. }
  118. else
  119. {
  120. if(pause == 1)
  121. {
  122. speedUp();
  123. pause = 0;
  124. move();
  125. }
  126. }
  127. }
  128. function speedUp()//蛇越行越快
  129. {
  130. times -= 4;
  131. if(times > 4)
  132. {
  133. sUp = setTimeout("speedUp()",speed);
  134. }
  135. }
  136. function move()//移动并判断蛇前面是什么
  137. {
  138. snakeX += goX;
  139. snakeY += goY;
  140. if(snakeY<0||snakeY>=rows||snakeX<0||snakeX>=cells)
  141. {
  142. gameOver("撞墙了");
  143. }
  144. else
  145. {
  146. snakeFront = gameMap[snakeY][snakeX];
  147. if(snakeFront == '0')//蛇前面为空
  148. {
  149. crawl();
  150. }
  151. else if(snakeFront == 'f')//蛇前面为食物
  152. {
  153. eat();
  154. }
  155. else if(snakeFront == 'b')//蛇前面为障碍物
  156. {
  157. gameOver("撞到障碍物");
  158. }
  159. else if(snakeFront == 's')//蛇前面为蛇
  160. {
  161. gameOver("咬到自己了");
  162. }
  163. }
  164. }
  165. function gameOver(type)//游戏结束
  166. {
  167. document.getElementById("state").innerHTML = "游戏结束";
  168. reStart = confirm("^_^啊哦~,"+type+",重新开始吗?")
  169. if(reStart)
  170. {
  171. window.location.reload();//刷新页面
  172. }
  173. }
  174. function crawl()//蛇前是空地时
  175. {
  176. //清除蛇尾,创建蛇头,产生爬行效果
  177. gameMap[snakeDIV[0].y][snakeDIV[0].x] = '0';
  178. snakeDIV[0].removeNode(true);
  179. createSnake();
  180. if(pause == 0)
  181. {
  182. setTimeout("move()",times);
  183. }
  184. }
  185. function eat()//蛇前面是食物时
  186. {
  187. createSnake();//增加一个蛇的节点
  188. document.getElementById("food").removeNode(true);//清除食物
  189. createFood();//创建食物
  190. if(pause == 0)
  191. {
  192. setTimeout("move()",times);
  193. }
  194. }
  195. </script>
  196. <title>贪食蛇</title>
  197. </head>
  198. <body>
  199. <h2>贪食蛇</h2>
  200. <hr style="color:#333" size="1px" />
  201. <p style="font-size:13px;">说明:1.绿色方块代表蛇,橙色或红色方块代表食物,黑色方块代表障碍物。2.用方向键控制蛇的方向,空格键暂停,方向键开始。<br />当前状态:<span id="state">准备开始</span><br />Author:Yoky</p>
  202. </body>
  203. </html>


[提示:你可先修改部分代码,再按运行]