Метеориты и жизни

Добавляем опасность и условие проигрыша.

Кадр 2D-игры Лови звёзды

Цель урока: Обработать два вида столкновения по-разному.

Как работать с примерами

Arcade запускается на компьютере. Первый урок показывает основу игрового файла; далее это фрагменты полной игры. Открой полный код и меняй в нём нужные строки. Кнопка онлайн IDE для этого проекта не используется.

Шаг 1 · Раздели награду и опасность

При столкновении звезда даёт очко, метеорит отнимает жизнь.

Python
if drop["kind"] == "star":    self.score += 1else:    self.lives -= 1
Что увидишь
Звезда: +1 к счёту. Метеорит: −1 жизнь.

Что происходит в коде

  1. Словарь drop хранит вид предмета по ключу kind.
  2. Если это star, увеличиваем счёт.
  3. Для любого другого вида здесь срабатывает else и уменьшается число жизней.

Шаг 2 · Останови игру после трёх ударов

Когда жизни закончились, состояние игры меняется с playing на lost.

Python
if self.lives <= 0:    self.state = "lost"if self.state != "playing":    return
Что увидишь
Движение останавливается, появляется экран проигрыша.

Что происходит в коде

  1. <= 0 учитывает ноль и отрицательные значения.
  2. state хранит этап игры: playing или lost.
  3. В начале on_update() return прекращает обновление, если игра закончилась.

Попробуй сам

  1. Измени начальное число жизней на 5.
  2. Врежься в три метеорита и проверь экран проигрыша.
  3. Объясни, почему после проигрыша падающие предметы останавливаются.

Меняй одну строчку за раз, сохраняй файл и запускай игру на компьютере снова.

Как это работает в полной игре

В полном файле у игрока три жизни. Красный метеорит отнимает одну; состояние lost останавливает движение, но окно остаётся открытым.

Скачать проект Arcade
Заметка для преподавателя

Покажите на доске таблицу: star → score +1, meteor → lives -1. Спросите, почему проверка конца игры стоит после обработки столкновений.