Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.04.2016, 09:33
Интересующийся
Отправить личное сообщение для mr_kaznachey Посмотреть профиль Найти все сообщения от mr_kaznachey
 
Регистрация: 15.03.2016
Сообщений: 14

Баги в змейке
Ребята помогите.Есть змейка,я её показал преподу он дал замечания
  • Текст очков и левела не должен быть внутри поля и наезжать на змейку (это мешает игроку).
  • Левел увеличивается только до 5, при этом скорость змейки не увеличивается (нет увеличения сложности).
  • Еда может появится внутри змейки http://prntscr.com/ank0u7 (нет условия при создании еды).
  • Иногда игра рестартуется из-за быстрого переключения клавишь (переменная d не успевает сменится в итоге змейка врезается сама в себя, вызывается check_collision===true).

Вот код смейки
$(document).ready(function(){
  //Canvas
  var canvas = $("#canvas")[0];
  var ctx = canvas.getContext("2d");
  var w = $("#canvas").width();
  var h = $("#canvas").height();
  //Сохрание ширины ячейки для лучшего управления
  var cw = 10;
  var d=100;
  var food;
  var score;
  var level;
  var speed=100;
  //Создание змейки
  var snake_array; // Масив ячеек
  function init()
  {
    d = "right";    //Стартовое управление
    create_snake();
    create_food();  //Создание еды
                    //Отображение Score и Level
    score = 0;
    level =1;
    //Скорость змею указана через setInverval
    //через значение указаное в переменной Speed
    if(typeof game_loop != "undefined") clearInterval(game_loop);
    game_loop = setInterval(paint, speed);
  }
 init();

  function create_snake()
  {
    var length = 5;    // Стартовоя длина змеи
    snake_array = [];  // Пустой масив чтобы начть
    for(var i = length-1; i>=0; i--)
    {
      // Создание горизонтальной змеи ,начиная с левого вверха
      snake_array.push({x: i, y:0});
    }
  }
  // Функция создание еды
  function create_food()
  {
    food = {
      x: Math.round(Math.random()*(w-cw)/cw),
      y: Math.round(Math.random()*(h-cw)/cw),
    };
    // Создание ячейки с х / у между 0-44
    // Потому что есть 45 (450/10) позиции accross строк и столбцов
  }
  // Рисование змеи
  function paint()
  {
// Чтобы избежать змеиный след нам нужно нарисовать BG на каждом кадре
// Рисование Bacground
    ctx.fillStyle = "white";
    ctx.fillRect(0, 0, w, h);
    ctx.strokeStyle = "black";
    ctx.strokeRect(0, 0, w, h);
// Движение змеи
    var nx = snake_array[0].x;
    var ny = snake_array[0].y;
    if(d == "right") nx++;
    else if(d == "left") nx--;
    else if(d == "up") ny--;
    else if(d == "down") ny++;
    // Рестарт игры если змея сталкиваеться с рамками
    if(nx == -1 || nx == w/cw || ny == -1 || ny == h/cw || check_collision(nx, ny, snake_array))
    {
      //рестарт
    init();
      return;
    }
    // Функция,седания змеи
    // Логика проста
    // Создание новой головы,вместо того чтобы добавлять в хвост


    if(nx == food.x && ny == food.y)
    {
      var tail = {x: nx, y: ny};
      score++;

      //Создание еды
      create_food();
    }
    else
    {
      var tail = snake_array.pop();
      tail.x = nx;
      tail.y = ny;
    }
    snake_array.unshift(tail); // Ложим обратно в хвост,вместо первой ячейки
    for(var i = 0; i < snake_array.length; i++)
    {
      var c = snake_array[i];
      // Клетка
      paint_cell(c.x, c.y, "#375");
    }
    // Рисование еды
    paint_cell(food.x, food.y, "black");
    // Рисование счётаи и левела
    var score_text = "Score: " + score;
    var level_text = "Level: " + level;
    ctx.fillText(score_text, 5, h-5);
    ctx.fillText(level_text, 350, h-5);
    ctx.font = "20pt VT323";
    }
// Функиция окрашивание клеток в белый цвет
  function paint_cell(x, y, color)
  {
    ctx.fillStyle = color;
    ctx.fillRect(x*cw, y*cw, cw, cw);
    ctx.strokeStyle = "white";
    ctx.strokeRect(x*cw, y*cw, cw, cw);
  }
  function check_collision(x, y, array)
  {
     // Функция проверки предусмотренные ли х / у координаты в масиви ячеек или нет
       for(var i = 0; i < array.length; i++)
    {
      if(array[i].x == x && array[i].y == y)
       return true;
    }
    return false;
  }
  // Клавиатура
  $(document).keydown(function(e){
    var key = e.which;
    if(key == "37" && d != "right") d = "left";
    else if(key == "38" && d != "down") d = "up";
    else if(key == "39" && d != "left") d = "right";
    else if(key == "40" && d != "up") d = "down";
  })
  })
Ответить с цитированием
  #2 (permalink)  
Старый 11.04.2016, 10:23
Интересующийся
Отправить личное сообщение для mr_kaznachey Посмотреть профиль Найти все сообщения от mr_kaznachey
 
Регистрация: 15.03.2016
Сообщений: 14

Помогите плз
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
rtl баги браузеров FanAizu (X)HTML/CSS 7 16.07.2020 19:37
Как напнуть разработчиков WebKit пофиксить баги? danik.js Оффтопик 5 27.01.2013 15:29
Баги Firefox и Google monolithed Оффтопик 8 19.11.2010 12:17
Баги в форме добавления nemo Серверные языки и технологии 0 18.07.2010 13:35
Баги в сниппетах ответов Илья Кантор Сайт Javascript.ru 31 11.06.2009 17:58