Game Snake

Змійка 1

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="utf-8"/>
    <title>Snake</title>
    <style>body {padding-left: 20px;}</style>
</head>
<body bgcolor="PapayaWhip">
<p>ЗМЕЙКА (управление стрелками или кнопками WASD)</p>
<canvas id="snake" width="800" height="600">HTML 5 не поддерживется</canvas>
 
<script type="application/javascript">
 
    var snake=document.getElementById("snake"), //id convas
        ctx=snake.getContext("2d"),
        xS=snake.width, yS=snake.height, // Берем из convas значение ширины и высоты
        qS=25, //Размер элемента змейки
        xZ=xS/2-qS, yZ=yS/2-qS, //Координаты позиции змейки, со стартовой позицией
        vK, xK=0, yK=0, //Направление (вектор) движения змейки
        xZarr=[], yZarr=[], //Массивы координат змейки
        xF, yF, //Координаты позиции фрукта
        rS=0; //Счетчик, т.е. число съеденных фруктов
    
    fruit(); //Вызываем функцию для расчета случайной стартовой позиции фрукта
    
    //Функция случайного выбора координат для фрукта
    function fruit() {
        xF=Math.round((xS/qS-1)*Math.random())*qS;
        yF=Math.round((yS/qS-1)*Math.random())*qS;
        for (var i=0; i<=(rS); i++) if (xZarr[i]==xF && yZarr[i]==yF) fruit(); 
//Повторный рандом при наложении на змейку
    };
    
    //Функция обнуления змейки при столкновении с хвостом
    function feil() {
        ctx.fillStyle="White"; //Вспышка при столкновении
        ctx.fillRect(0, 0, xS, yS);
        xZarr.length=1; //Стираем X-массив змейки до 1 элемента
        yZarr.length=1; //Стираем Y-массив змейки до 1 элемента
        rS=0; //Обнуляем счетчик
    };
    
    //Отслеживаем нажатие клавиш в потоке событий
    onkeydown=function(event) {
        event.preventDefault(); 
//Отменяются исполнения браузером событий event, 
что-бы не срабатывал скролл(прокрутка) страниц, при нажатии стрелок
        switch(event.keyCode) {
            case 38: case 87: if (vK!=1) {xK=0; yK=-1; vK=1}; break; //Вверх
            case 39: case 68: if (vK!=2) {xK=1; yK=0; vK=2}; break; //Вправо
            case 40: case 83: if (vK!=1) {xK=0; yK=1; vK=1}; break; //Вниз
            case 37: case 65: if (vK!=2) {xK=-1; yK=0; vK=2}; break; //Влево
        }
    };
    
    //Функция отрисовки кадра через интервал времени
    setInterval(function() {
        
        //Фон и размер игрового поля
        ctx.fillStyle="SpringGreen";
        ctx.fillRect(0, 0, xS, yS);
        
        //Тень
        ctx.shadowBlur=10;
        ctx.shadowColor="MidnightBlue";
        
        //Цвет и позиция фрукта
        ctx.beginPath();
        ctx.arc(xF+qS/2, yF+qS/2, qS/1.6, qS/1.6, Math.PI*2, true); //Разметка оружности
        ctx.fillStyle="Red"; //Цвет круга
        ctx.fill();
        ctx.strokeStyle="Lime"; //Цвет линии окружности
        ctx.stroke();
        
        //Рассчитываем координату при движении и телепортируем при выходе за края
        xZ=xZ+xK*qS;
        if (xZ>=xS) xZ=0;
        if (xZ<0) xZ=xS-qS;
        yZ=yZ+yK*qS;
        if (yZ>=yS) yZ=0;
        if (yZ<0) yZ=yS-qS;
        
        //Проверка на столкновение
        for (var i=0; i<=(rS); i++) if (xZarr[i]==xZ && yZarr[i]==yZ) feil();
        
        //Заменяем координаты в начальных элементах массива
        xZarr.unshift(xZ);
        yZarr.unshift(yZ);
        
        //Цвет и цикл вывода массива элементов змейки с отрисовкой
        ctx.fillStyle="Blue";
        for (var i=0; i<=(rS); i++) ctx.fillRect(xZarr[i]+1, yZarr[i]+1, qS-2, qS-2); 
//Отрисовка массива змейки
        

        //Кушаем фрукт, при совпадении координат головы змеи и фрукта - 
выводим новый фрукт и счетчик +1
        if (xF==xZ && yF==yZ) {
            fruit();
            rS++;
        } else { //Иначе - стираем хвост, т.е. змейка перемещается без прироста
            xZarr.pop();
            yZarr.pop();
        }
        
        //Выводим счетчик съеденных фруктов
        ctx.fillStyle="Black"; //Цвет шрифта счетчика
        ctx.font="bold 13pt Arial"; //Стиль, размер и шрифт
        ctx.textBaseline="middle"; //Расположение по вертикали
        ctx.textAlign="center"; //Расположение по горизонтали
        ctx.fillText(rS+1, xF+qS/2, yF+qS/2); //Расположение счетчика (привязка к фрукту)
        
    }, 1000/15); //Пауза (кадров в секунду)
    
</script>
</body> 
</html>_________________________________________________________________________
Змійка 2






 

var wallCollision = leftCollision || topCollision || rightCollision || bottomCollision;

      var selfCollision = false;

      for (var i = 0; i < this.segments.length; i++) {
        if (head.equal(this.segments[i])) {
          selfCollision = true;
        }
      }

      return wallCollision || selfCollision;
    };

    // Set the snake's next direction based on the keyboard
    Snake.prototype.setDirection = function (newDirection) {
      if (this.direction === "up" && newDirection === "down") {
        return;
      } else if (this.direction === "right" && newDirection === "left") {
        return;
      } else if (this.direction === "down" && newDirection === "up") {
        return;
      } else if (this.direction === "left" && newDirection === "right") {
        return;
      }

      this.nextDirection = newDirection;
    };

    // The Apple constructor
    var Apple = function () {
      this.position = new Block(10, 10);
    };

    // Draw a circle at the apple's location
    Apple.prototype.draw = function () {
      this.position.drawCircle("LimeGreen");
    };

    // Move the apple to a new random location
    Apple.prototype.move = function () {
      var randomCol = Math.floor(Math.random() * (widthInBlocks - 2)) + 1;
      var randomRow = Math.floor(Math.random() * (heightInBlocks - 2)) + 1;
      this.position = new Block(randomCol, randomRow);
    };

    // Create the snake and apple objects
    var snake = new Snake();
    var apple = new Apple();

    // Pass an animation function to setInterval
    var intervalId = setInterval(function () {
      ctx.clearRect(0, 0, width, height);
      drawScore();
      snake.move();
      snake.draw();
      apple.draw();
      drawBorder();
    }, 100);

    // Convert keycodes to directions
    var directions = {
      37: "left",
      38: "up",
      39: "right",
      40: "down"
    };

    // The keydown handler for handling direction key presses
    $("body").keydown(function (event) {
      var newDirection = directions[event.keyCode];
      if (newDirection !== undefined) {
        snake.setDirection(newDirection);
      }
    });
    </script>
</body>
</html>




Немає коментарів:

Дописати коментар