Advertisement
Guest User

Untitled

a guest
Sep 20th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.18 KB | None | 0 0
  1. function Timer() {
  2. this.t = Date.now();
  3. }
  4.  
  5. Timer.prototype = {
  6. delta: function () {
  7. return Date.now() - this.t;
  8. },
  9.  
  10. reset: function () {
  11. this.t = Date.now();
  12. }
  13. };
  14.  
  15. var map = {
  16. width: 13,
  17. height: 13,
  18. data: [
  19. [
  20. ['|', '–', '–', '–', '•', '–', '–', '–', '•', '–', '–', '–', '|'],
  21. ['|', '*', '•', '•', '•', '•', '•', '•', '•', '•', '•', '*', '|'],
  22. ['|', '•', '/', '–', '•', '•', '•', '•', '•', '–', '\\', '•', '|'],
  23. ['|', '•', '|', '•', '•', '•', '•', '•', '•', '•', '|', '•', '|'],
  24. ['|', '•', '•', '•', '•', '•', '•', '•', '•', '•', '•', '•', '|'],
  25. ['|', '•', '|', '•', '|', ' ', ' ', ' ', '|', '•', '|', '•', '|'],
  26. ['|', '•', '•', '•', '•', ' ', ' ', ' ', '•', '•', '•', '•', '|'],
  27. ['|', '•', '|', '•', '•', '–', '–', '–', '•', '•', '|', '•', '|'],
  28. ['|', '•', '•', '•', '•', '•', '•', '•', '•', '•', '•', '•', '|'],
  29. ['|', '•', '|', '•', '•', '•', '•', '•', '•', '•', '|', '•', '|'],
  30. ['|', '•', '\\', '–', '•', '•', '–', '•', '•', '–', '/', '•', '|'],
  31. ['|', '*', '•', '•', '•', '•', '•', '•', '•', '•', '•', '*', '|'],
  32. ['|', '–', '–', '–', '•', '–', '–', '–', '•', '–', '–', '–', '|'],
  33. ]
  34. ]
  35. };
  36.  
  37. var level = 0;
  38.  
  39. var dots = map.data[level].reduce(function (p, c) {
  40. p += c.filter(function (d) { return d == '•'}).length;
  41. return p;
  42. }, 0);
  43.  
  44. var score = 0;
  45.  
  46. var player = {
  47. char: 'c',
  48. big: {
  49. is: false,
  50. duration: 5000,
  51. timer: null
  52. },
  53. dead: false,
  54. x: 6,
  55. y: 8,
  56. color: '#2196F3'
  57. };
  58.  
  59. var enemies = [
  60. {
  61. char: '$',
  62. dead: false,
  63. x: 6,
  64. y: 5,
  65. ox: 6,
  66. oy: 5,
  67. dir: getRandomInt(0, 3),
  68. wait: new Timer(),
  69. speed: 1300,
  70. color: '#F44336'
  71. },
  72. {
  73. char: '#',
  74. dead: false,
  75. x: 7,
  76. y: 6,
  77. ox: 7,
  78. oy: 6,
  79. dir: getRandomInt(0, 3),
  80. wait: new Timer(),
  81. speed: 1000,
  82. color: '#9C27B0'
  83. },
  84. {
  85. char: '%',
  86. dead: false,
  87. x: 5,
  88. y: 6,
  89. ox: 5,
  90. oy: 6,
  91. dir: getRandomInt(0, 3),
  92. wait: new Timer(),
  93. speed: 500,
  94. color: '#4CAF50'
  95. },
  96. {
  97. char: '&',
  98. dead: false,
  99. x: 6,
  100. y: 6,
  101. ox: 5,
  102. oy: 6,
  103. dir: getRandomInt(0, 3),
  104. wait: new Timer(),
  105. speed: 300,
  106. color: '#795548'
  107. }
  108. ];
  109.  
  110. var scoreboard = document.createElement('div');
  111. document.body.appendChild(scoreboard);
  112.  
  113. var board = document.createElement('pre');
  114. document.body.appendChild(board);
  115.  
  116. var keys = {};
  117. document.addEventListener('keyup', function (e) {
  118. keys[e.which] = true;
  119. });
  120.  
  121. function pressed(key) {
  122. if (keys[key]) {
  123. delete keys[key];
  124. return true;
  125. }
  126. }
  127.  
  128. function getRandomInt(min, max) {
  129. min = Math.ceil(min);
  130. max = Math.floor(max);
  131. return Math.floor(Math.random() * (max - min + 1)) + min;
  132. }
  133.  
  134. function checkBoundaries(t, loc) {
  135. return /\||–|\\|\//.test(loc);
  136. }
  137.  
  138. function update() {
  139. if (!player.dead) {
  140. if (pressed(40)) { // down
  141. if (player.y != map.height - 1) {
  142. if (!checkBoundaries(player, map.data[level][player.y + 1][player.x])) player.y++;
  143. } else {
  144. player.y = 0;
  145. }
  146. }
  147.  
  148. if (pressed(38)) { // up
  149. if (player.y != 0) {
  150. if (!checkBoundaries(player, map.data[level][player.y - 1][player.x])) player.y--;
  151. } else {
  152. player.y = map.height - 1;
  153. }
  154. }
  155.  
  156. if (pressed(37)) { //left
  157. if (player.x != 0) {
  158. if (!checkBoundaries(player, map.data[level][player.y][player.x - 1])) player.x--;
  159. } else {
  160. player.x = map.width - 1;
  161. }
  162. }
  163.  
  164. if (pressed(39)) { // right
  165. if (player.x != map.width - 1) {
  166. if (!checkBoundaries(player, map.data[level][player.y][player.x + 1])) player.x++;
  167. } else {
  168. player.x = 0;
  169. }
  170. }
  171. }
  172.  
  173. enemies.forEach(function (enemy) {
  174. if (!enemy.dead && enemy.wait.delta() > (player.big.is ? enemy.speed * 2 : enemy.speed)) {
  175. if (enemy.dir == 0) {
  176. if (enemy.y != 0) {
  177. if (!checkBoundaries(enemy, map.data[level][enemy.y - 1][enemy.x])) {
  178. enemy.y--;
  179. if (getRandomInt(0, 9) == 3) enemy.dir = getRandomInt(0, 3);
  180. } else {
  181. enemy.dir = getRandomInt(0, 3);
  182. }
  183. } else {
  184. enemy.y = map.height - 1;
  185. }
  186. } else if (enemy.dir == 1) {
  187. if (enemy.y != map.height - 1) {
  188. if (!checkBoundaries(enemy, map.data[level][enemy.y + 1][enemy.x])) {
  189. enemy.y++;
  190. if (getRandomInt(0, 7) == 2) enemy.dir = getRandomInt(0, 3);
  191. } else {
  192. enemy.dir = getRandomInt(0, 3);
  193. }
  194. } else {
  195. enemy.y = 0;
  196. }
  197. } else if (enemy.dir == 2) {
  198. if (enemy.x != 0) {
  199. if (!checkBoundaries(enemy, map.data[level][enemy.y][enemy.x - 1])) {
  200. enemy.x--;
  201. if (getRandomInt(0, 10) == 5) enemy.dir = getRandomInt(0, 3);
  202. } else {
  203. enemy.dir = getRandomInt(0, 3);
  204. }
  205. } else {
  206. enemy.x = map.width - 1;
  207. }
  208. } else if (enemy.dir == 3) {
  209. if (enemy.x != map.width - 1) {
  210. if (!checkBoundaries(enemy, map.data[level][enemy.y][enemy.x + 1])) {
  211. enemy.x++;
  212. if (getRandomInt(0, 5) == 3) enemy.dir = getRandomInt(0, 3);
  213. } else {
  214. enemy.dir = getRandomInt(0, 3);
  215. }
  216. } else {
  217. enemy.x = 0;
  218. }
  219. }
  220.  
  221. enemy.wait.reset();
  222. }
  223.  
  224. if (!player.dead && !enemy.dead && player.x == enemy.x && player.y == enemy.y) {
  225. if (player.big.is) {
  226. score += 10;
  227. enemy.dead = true;
  228. enemy.wait.reset();
  229. } else {
  230. player.dead = true;
  231. }
  232. }
  233.  
  234. if (enemy.dead && enemy.wait.delta() > 5000) {
  235. enemy.y = enemy.oy;
  236. enemy.x = enemy.ox;
  237. enemy.dead = false;
  238. enemy.wait.reset();
  239. }
  240. });
  241.  
  242. if (!player.dead && map.data[level][player.y][player.x] == '*') {
  243. player.big.is = true;
  244. player.big.timer = new Timer();
  245. player.char = 'C';
  246. map.data[level][player.y][player.x] = ' ';
  247. }
  248.  
  249. if (!player.dead && map.data[level][player.y][player.x] == '•') {
  250. score++;
  251. dots--;
  252. map.data[level][player.y][player.x] = ' ';
  253. }
  254.  
  255. if (!player.dead && player.big.is) {
  256. if (player.big.timer.delta() > player.big.duration) {
  257. player.big.is = false;
  258. player.char = 'c';
  259. player.big.timer = null;
  260. }
  261. }
  262. }
  263.  
  264. function draw() {
  265.  
  266. while (board.lastChild) {
  267. board.removeChild(board.lastChild);
  268. }
  269.  
  270. scoreboard.innerText = 'Score: ' + score;
  271.  
  272. if (player.dead) {
  273. scoreboard.style.color = '#F44336';
  274. scoreboard.innerText = 'You were eat\'n! You scored ' + score + ' points!';
  275. }
  276.  
  277. if (dots == 0) {
  278. scoreboard.style.color = '#4CAF50';
  279. scoreboard.innerText = 'You won! You scored ' + score + ' points!';
  280. }
  281.  
  282. for (var y=0; y<map.data[level].length; y++) {
  283.  
  284. for (var x=0; x<map.data[level][y].length; x++) {
  285. var node = document.createElement('span');
  286.  
  287. node.innerText = map.data[level][y][x];
  288. if (map.data[level][y][x] == '•') node.style.color = '#BDBDBD';
  289. if (map.data[level][y][x] == '|') node.style.color = '#0D47A1';
  290. if (map.data[level][y][x] == '*') node.style.color = '#F57F17';
  291.  
  292. enemies.forEach(function (enemy) {
  293. if (!enemy.dead && enemy.y == y && enemy.x == x) {
  294. node.innerText = enemy.char;
  295. node.style.color = enemy.color;
  296.  
  297. if (player.big.is) {
  298. node.style.color = '#00BCD4';
  299. }
  300. }
  301. });
  302.  
  303. if (!player.dead && player.y == y && player.x == x) {
  304. node.innerText = player.char;
  305. node.style.color = player.color;
  306. }
  307.  
  308. board.appendChild(node);
  309. }
  310.  
  311. board.appendChild(document.createElement('br'));
  312. }
  313.  
  314.  
  315. }
  316.  
  317. function loop() {
  318. update();
  319. draw();
  320.  
  321. if (!player.dead && dots != 0) window.requestAnimationFrame(loop);
  322. }
  323.  
  324. window.requestAnimationFrame(loop);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement