当前位置:   article > 正文

nodeJS贪吃蛇

node.js贪吃蛇

run.js (需要自己先用npm下载keypress这个包 用 npm install keypress --save 下载)

如果想在xshell上玩需要把空格和方块改下 (在windows的控制台用的话一个方块是两个字符,在xshell上不知道为啥是一个字符,还需要修改下xshell上文本显示的样式显示才会正常)

  1. const config = require('./config');
  2. const keypress = require('keypress');
  3. var live = false;
  4. var snakes = [];
  5. var food = {};
  6. var score = 0;
  7. var keyDown = 'right';
  8. var stepX = 1;
  9. var stepY = 0;
  10. const startNum = config.startNum;
  11. const time = config.time;
  12. DawnCanvas([{top:0,left:0},{top:10,left:0}])
  13. keypress(process.stdin); //监听键盘输入
  14. process.stdin.on('keypress', function (ch, key) {
  15.   //console.log('got "keypress"', key);
  16.   if (key && key.ctrl && key.name == 'c') {
  17.     process.abort();
  18.   }
  19. if(key)
  20. {
  21. if(!live)
  22. {
  23. start();
  24. }
  25. else
  26. {
  27. //console.log(keyDown)
  28. if(key.name == "up" || key.name == "w")
  29. {
  30. if(keyDown != 'down')
  31. {
  32. keyDown = 'up';
  33. stepX = 0;
  34. stepY = -1;
  35. }
  36. }
  37. else if(key.name == "down" || key.name == "s")
  38. {
  39. if(keyDown != 'up')
  40. {
  41. keyDown = 'down';
  42. stepX = 0;
  43. stepY = 1;
  44. }
  45. }
  46. else if(key.name == "left" || key.name == "a")
  47. {
  48. if(keyDown != 'right')
  49. {
  50. keyDown = 'left';
  51. stepX = -1;
  52. stepY = 0;
  53. }
  54. }
  55. else if(key.name == "right" || key.name == "d")
  56. {
  57. if(keyDown != 'left')
  58. {
  59. keyDown = 'right';
  60. stepX = 1;
  61. stepY = 0;
  62. }
  63. }
  64. }
  65. }
  66. });
  67. process.stdin.setRawMode(true);
  68. process.stdin.resume();
  69. function start()
  70. {
  71. snakes = [];
  72. stepX = 1;
  73. stepY = 0;
  74. keyDown = 'right';
  75. live = true;
  76. score = 0;
  77. DawnSnake(startNum);
  78. createFood();
  79. SnakeMove();
  80. }
  81. function SnakeMove() {
  82. if(live){
  83. for(var i=0;i<snakes.length-1;i++)
  84. {
  85. snakes[i].top = snakes[i+1].top
  86. snakes[i].left = snakes[i+1].left
  87. }
  88. var first = snakes.length-1
  89. snakes[first].top = snakes[first].top+stepY;
  90. snakes[first].left = snakes[first].left+stepX;
  91. if(!isLive(snakes[first].top,snakes[first].left))
  92. {
  93. live = false;
  94. console.log("游戏结束")
  95. }
  96. else
  97. {
  98. eatFood(snakes[first].top,snakes[first].left);
  99. var snakes1 = [].concat(snakes);
  100. snakes1.push(food);
  101. DawnCanvas(snakes1)
  102. setTimeout(function(){
  103. SnakeMove()
  104. },time);
  105. }
  106. }
  107. }
  108. function isLive(top,left){
  109. if(top>24||top<0||left>24||left<0)
  110. {
  111. return false;
  112. }
  113. else
  114. {
  115. for(var i=0;i<snakes.length-1;i++)
  116. {
  117. if(top==snakes[i].top&&left==snakes[i].left)
  118. {
  119. return false;
  120. break;
  121. }
  122. }
  123. return true;
  124. }
  125. }
  126. function eatFood(top,left){ //是否吃到食物
  127. if(top==food.top&&left==food.left)
  128. {
  129. score++;
  130. snakes.push({top:top,left:left})
  131. createFood();
  132. }
  133. }
  134. function createFood(){ //创建食物
  135. isCreate = true
  136. do
  137. {
  138. food={
  139. top:Math.round(Math.random()*24),
  140. left:Math.round(Math.random()*24)
  141. }
  142. for(var i=0;i<snakes.length;i++)
  143. {
  144. if(food.top==snakes[i].top&&food.left==snakes[i].left)
  145. {
  146. isCreate = false;
  147. break;
  148. }
  149. else
  150. {
  151. isCreate = true;
  152. }
  153. }
  154. }
  155. while(!isCreate)
  156. }
  157. function DawnSnake(startNum) //初始化蛇
  158. {
  159. for(let i=0;i<startNum;i++)
  160. {
  161. var item = {
  162. top:0,
  163. left:i
  164. }
  165. snakes.push(item);
  166. }
  167. }
  168. function DawnCanvas(items1)    //绘图游戏界面
  169. {
  170. var isDawn = false;
  171. var canvas = '';
  172. canvas += '┍┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┑\n';
  173. for(let i=0;i<25;i++)
  174. {
  175. canvas += '│ ';
  176. for(let j=0;j<25;j++)
  177. {
  178. isDawn = false;
  179. for(let item of items1)
  180. {
  181. if(item.top == i && item.left == j)
  182. {
  183. canvas += '■';
  184. isDawn = true;
  185. }
  186. if(isDawn)
  187. {
  188. break;
  189. }
  190. }
  191. if(!isDawn)
  192. {
  193. canvas += ' ';
  194. }
  195. }
  196. canvas+='│ \n';
  197. }
  198. canvas += '┕┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┚\n';
  199. process.stdout.write('\033[2J'); //清空控制台
  200. console.log(canvas)
  201. if(!live)
  202. {
  203. console.log('按任意键开始游戏....')
  204. }
  205. else
  206. {
  207. console.log("得分:",score)
  208. }
  209. }
  210. const Rand = function(Min,Max){
  211. var Range = Max - Min;
  212. var Rand = Math.random();
  213. var num = Min + Math.round(Rand * Range); //四舍五入
  214. return num;
  215. }

config.js

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

闽ICP备14008679号