Условия, циклы и типы данных
Условия и циклы — это мозг игры: они решают, что и сколько раз должно произойти.
Суть: if выбирает путь, for и while повторяют действие, а типы данных хранят разные виды значений.
Игра постоянно принимает решения: если здоровье ноль — игрок проиграл; если нажата стрелка вправо — двигаемся вправо; пока есть враги — продолжаем уровень. Все эти «если» и «пока» — это условия и циклы. В GDScript они выглядят как в Python: if, elif, else для ветвлений, for и while для повторений.
var health: int = 30
if health <= 0:
print("Игра окончена")
elif health < 10:
print("Осторожно, мало здоровья!")
else:
print("Всё хорошо")
for i in range(3):
print("Враг номер ", i)
var enemies: int = 5
while enemies > 0:
enemies -= 1Кроме управления есть типы данных — разные коробки под разные значения. int хранит целые числа (очки, число жизней), float — дробные (скорость, время), String — текст, bool — да/нет (жив ли игрок). Особенно важен Vector2 — пара чисел (x, y), которой задают позиции и направления в 2D. Для коллекций есть массивы (список значений) и словари (пары ключ-значение).
Отдельно стоит привыкнуть к словарям — это пары «ключ: значение», и в играх они встречаются постоянно. Настройки уровня, инвентарь игрока, таблица урона для разных типов врагов — всё это удобно хранить в словаре. Массив отвечает на вопрос «какие элементы и в каком порядке», а словарь — на вопрос «что лежит под этим именем». Например, в массиве enemies лежат сами враги по порядку, а в словаре scores можно держать очки каждого игрока по его имени. Освоив if, циклы, массивы и словари, ты получаешь полный набор инструментов, чтобы описать практически любую игровую логику.
Как работает под капотом
Условие if вычисляет логическое выражение в скобках: получается true или false. Если true — выполняется блок под if, иначе движок идёт к elif или else. Цикл for пробегает по диапазону или коллекции, выполняя тело на каждом шаге. Цикл while повторяет тело, пока условие истинно, — и если условие никогда не станет ложным, игра зависнет в бесконечном цикле.
Разберём типичную игровую проверку на Python: применяем урон, выбираем сообщение по уровню здоровья, считаем живых врагов в списке.
health = 30
health -= 25 # получили урон
if health <= 0:
print("Игра окончена")
elif health < 10:
print(f"Осторожно! Здоровье: {health}")
else:
print(f"Здоровье в норме: {health}")
enemies = ["гоблин", "слизень", "летучая мышь"]
alive = 0
for e in enemies:
print("На уровне:", e)
alive += 1
print("Всего врагов:", alive)Та же логика на Python ▶. if/elif/else и for здесь работают точно как в GDScript. Запусти и поменяй урон с 25 на 35 — увидишь, как игра уходит в ветку «Игра окончена».
Стоит потренировать и логические операторы, которые часто соседствуют с условиями: and, or, not. Они склеивают проверки: «прыжок разрешён, если нажата клавиша and персонаж на земле»; «игра окончена, если здоровье ноль or истекло время»; «дверь закрыта, если not has_key». Эти три слова делают условия выразительными и читаются почти как обычный текст. Привыкнув составлять из них сложные проверки, ты сможешь точно описать любое игровое правило — а правила и есть сердце геймплея, ведь именно они решают, что игроку можно, а что нельзя.
Частые ошибки
Классическая ловушка — бесконечный while: если внутри цикла ты забыл уменьшать счётчик (enemies -= 1), условие enemies > 0 никогда не станет ложным и игра зависнет. Вторая ошибка — путать целые и дробные: при делении целых можно потерять дробную часть, для скорости и времени всегда используй float. Третья — сравнивать строку и число напрямую: "10" и 10 это разные вещи. И помни про порядок в Vector2: первое число — x (вправо), второе — y (вниз, а не вверх — в 2D ось y направлена вниз).
Best practices
Используй elif вместо вложенных if там, где это читается яснее. Выбирай правильный тип: int для счётчиков, float для физики, bool для флагов состояния. Для направлений и позиций всегда бери Vector2 — не таскай x и y по отдельности. Давай булевым переменным имена-вопросы: is_alive, can_jump, has_key — код читается как предложение.
Итоги: if/elif/else выбирают путь, for и while повторяют действия. Типы: int (целые), float (дробные), String (текст), bool (да/нет), Vector2 (пара x, y для 2D). Берегись бесконечного while без изменения счётчика и помни, что ось y в 2D направлена вниз.