Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var rand = function (min, max) {
  2.     k = Math.floor(Math.random() * (max - min) + min);
  3.     return (Math.round(k / s) * s);
  4. }
  5. function generateApple() {
  6.     a = [rand(0, innerWidth),rand(0, innerHeight)];
  7. }
  8. var gP = document.getElementById('game');
  9. var g = gP.getContext('2d');
  10. var sBody = [{x: 0,y: 0}];
  11. var d = 1; //Направление змейки 1 - вправо, 2 - вниз 3 - влево, 4 - вверх
  12. var a = null;
  13. var s = 25;
  14. var sound = new Audio("audio/coin.wav");
  15. gP.width = innerWidth; //на всю ширину экрана
  16. gP.height = innerHeight; //на всю высоту экрана
  17. generateApple();
  18. setInterval(function(){
  19.     if (a[0] + s >= gP.width || a[1] + s >= gP.height) {
  20.         generateApple();
  21.     }
  22.     g.clearRect(0,0,gP.width,gP.height); //Очищаем старое
  23.     g.fillStyle = "red";
  24.     g.fillRect(...a, s, s);
  25.     g.fillStyle = "#000";
  26.     sBody.forEach(function(el, i){
  27.         if (el.x == sBody[sBody.length - 1].x
  28.             && el.y == sBody[sBody.length - 1].y
  29.             && i < sBody.length - 1) { //Проверка на столкновение
  30.                 sBody.splice(0,sBody.length-1);
  31.                 sBody = [{x:0,y:0}];
  32.                 d = 1;
  33.             }
  34.     });
  35.     var m = sBody[0], f = {x: m.x,y: m.y}, l = sBody[sBody.length - 1];
  36.     // сохраняем хвост и голову змейки
  37.     if (d == 1)  f.x = l.x + s, f.y = Math.round(l.y / s) * s;
  38.     // если направление вправо, то тогда сохраняем Y, но меняем X на + s
  39.     if (d == 2) f.y = l.y + s, f.x = Math.round(l.x / s) * s;
  40.     // если направление вниз, то сохраняем X, но меняем Y на + s
  41.     if (d == 3) f.x = l.x - s, f.y = Math.round(l.y / s) * s;
  42.     // если направление влево, то сохраняем Y, но меняем X на -s
  43.     if (d == 4) f.y = l.y - s, f.x = Math.round(l.x / s) * s;
  44.     // если направление вверх, то сохраняем X, Но меняем Y на -ss
  45.     sBody.push(f); //Добавляем хвост после головы с новыми координатами
  46.     sBody.splice(0,1); //Удаляем хвост
  47.     //Отрисовываем каждый элемент змейки
  48.     sBody.forEach(function(pob, i){
  49.         if (d == 1) if (pob.x > Math.round(gP.width / s) * s) pob.x = 0;
  50.         if (d == 2) if (pob.y > Math.round(gP.height / s) * s) pob.y = 0;
  51.         if (d == 3) if (pob.x < 0) pob.x = Math.round(gP.width / s) * s;
  52.         if (d == 4) if (pob.y < 0) pob.y = Math.round(gP.height / s) * s;
  53.         if (pob.x == a[0] && pob.y == a[1]) {
  54.             generateApple();
  55.             sBody.unshift({x: f.x - s, y:l.y})
  56.             sound.play();
  57.         }
  58.         g.fillRect(pob.x, pob.y, s, s);    
  59.         // s - это ширина и высота нашего "квадрата"
  60.     });
  61. }, 1000/30);
  62.  
  63. onkeydown = function (e) {
  64.     var k = e.keyCode;
  65.     if ([38,39,40,37].indexOf(k) >= 0)
  66.         e.preventDefault();
  67.     if (k == 39 && d != 3) d = 1; //Вправо
  68.     if (k == 40 && d != 4) d = 2; //Вниз
  69.     if (k == 37 && d != 1) d = 3; //Влево
  70.     if (k == 38 && d != 2) d = 4; //Вверх
  71. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement