Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.05.2020, 00:29
Новичок на форуме
Отправить личное сообщение для legenda1073 Посмотреть профиль Найти все сообщения от legenda1073
 
Регистрация: 15.05.2020
Сообщений: 2

столкновение головы змейки со стеной
Доброго времени суток ,вопрос как сделать так что бы змейка после столкновения с одной стороной стены , вылазила с другой стороны стены? что бы было geme over только при столкновении сама с собой имеем код
update: function ()
    {
        // ...
 
        if (updateDelay % (10 - speed) == 0)
        {
            // ...
 
            // Увеличиваем размер змейки, если яблоко было съедено
            // Создаём блок позади змейки со старыми координатами последнего блока
            // (последний блок, к настоящему моменту, переместился вместе с остальной частью змейки)
            if (addNew)
            {
                snake.unshift(game.add.sprite(oldLastCellx, oldLastCelly, 'snake'));
                addNew = false;
            }
 
            // Проверяем столкновение с яблоком
            this.appleCollision();
 
            // Проверяем столкновение головы змейки со своим телом
            // Параметр - голова змейки
            this.selfCollision(firstCell);
 
            // Проверяем столкновение головы змейки со стеной
            // Параметр - голова змейки
            this.wallCollision(firstCell);
        }
    },
 
    generateApple: function ()
    {
        // Выбираем случайное место на игровом поле
        // X между 0 и 585 (39*15)
        // Y между 0 и 435 (29*15)
        var randomX = Math.floor(Math.random() * 40) * squareSize,
            randomY = Math.floor(Math.random() * 30) * squareSize;
 
        // Добавляем новое яблоко
        apple = game.add.sprite(randomX, randomY, 'apple');
    },
 
    appleCollision: function ()
    {
        // Проверяем, что любая часть змейки пересекла яблоко
        // Проверка пересечения со всеми частями змейки необходима, чтобы
        // учесть случай, если новое яблоко появится внутри змейки
        for (var i = 0; i < snake.length; i++)
        {
            if (snake[i].x == apple.x && snake[i].y == apple.y)
            {
                // В следущий момент времени, когда змейка переместится, то
                // новый блок будет добавлен к ней
                addNew = true;
 
                // Удаляем старое яблоко
                apple.destroy();
 
                // Создаём новое яблоко
                this.generateApple();
 
                // Увеличиваем число заработанных очков
                score++;
 
                // Обновняем очки на экране
                scoreTextValue.text = score.toString();
            }
        }
 
    },
 
    selfCollision: function (head)
    {
        // Проверяем, что голова змейки не пересекла одну из своих частей
        for (var i = 0; i < snake.length - 1; i++)
        {
            if (head.x == snake[i].x && head.y == snake[i].y)
            {
                // Если пересекла, то показываем экран Game Over
                game.state.start('Game_Over');
            }
        }
 
    },
 
    wallCollision: function (head)
    {
        // Проверяем, что голова змейки находится в границах игрового поля
        if (head.x >= 600 || head.x < 0 || head.y >= 450 || head.y < 0)
        {
            // Если это не так, что мы врезались в стену. Значит, показываем экран Game Over
            game.state.start('Game_Over');
        }
    }


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var Game_Over = {
 
    preload: function ()
    {
        // Загружаем рисунок
        game.load.image('gameover', './assets/images/gameover.png');
    },
 
    create: function ()
    {
        // Создаём кнопку для старта игры, как мы делали в скрипте main.js
        this.add.button(0, 0, 'gameover', this.startGame, this);
 
        // Выводим на экран сколько мы набрали очков
        game.add.text(235, 350, "LAST SCORE", { font: "bold 16px sans-serif", fill: "#46c0f9", align: "center" });
        game.add.text(350, 348, score.toString(), { font: "bold 20px sans-serif", fill: "#fff", align: "center" });
    },
 
    startGame: function ()
    {
        // Меняем текущее состояние обратно на состояние "Игра"
        // Change the state back to Game.
        this.state.start('Game');
    }
};
Ответить с цитированием
  #2 (permalink)  
Старый 15.05.2020, 06:14
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

wallCollision: function(head) {
    if (head.x >= 600) {
        head.x -= 600;
    } else if (head.x < 0) {
        head.x += 600;
    }
    if (head.y >= 450) {
        head.y -= 450;
    } else if (head.y < 0) {
        head.y += 450;
    }
}
Ответить с цитированием
  #3 (permalink)  
Старый 15.05.2020, 09:33
Новичок на форуме
Отправить личное сообщение для legenda1073 Посмотреть профиль Найти все сообщения от legenda1073
 
Регистрация: 15.05.2020
Сообщений: 2

Сообщение от Rise Посмотреть сообщение
wallCollision: function(head) {
    if (head.x >= 600) {
        head.x -= 600;
    } else if (head.x < 0) {
        head.x += 600;
    }
    if (head.y >= 450) {
        head.y -= 450;
    } else if (head.y < 0) {
        head.y += 450;
    }
}
ОГРОМНОЕ СПАСИБО

Последний раз редактировалось legenda1073, 15.05.2020 в 09:43.
Ответить с цитированием
Ответ



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

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