Урок 2. Первый герой: рисуем и двигаем квадрат
УЧЕБНИК КУРСА: «PYTHON ЧЕРЕЗ СОЗДАНИЕ ИГР»
УРОК 2. Первый герой: рисуем и двигаем квадрат
Время на изучение: 1.5-2 часа (включая практику и домашнее задание)
ЦЕЛИ УРОКА
После изучения этой главы ты сможешь:
Понимать разницу между типами данных
int(числа) иstr(текст).Использовать переменные для хранения характеристик игрока (позиция, скорость, цвет).
Разбираться в системе координат экрана (почему Y растёт вниз).
Нарисовать прямоугольник (игрока) на экране.
Заставить игрока двигаться автоматически.
Подготовить код к управлению с клавиатуры (на следующем уроке).
СВЯЗЬ С ПРОШЛЫМ УРОКОМ
| Что было в Уроке 1 | Что будет в Уроке 2 |
|---|---|
| Создали игровое окно («сцену») | Добавим первого «актёра» (игрока) |
| Переменные для настроек окна | Переменные для характеристик героя |
| Фон закрашивали цветом | Рисуем объекты на фоне |
| Цикл работал вхолостую | Цикл обновляет позицию игрока |
💡 НАПОМИНАНИЕ: Если ты пропустил Урок 1 или что-то забыл — открой предыдущую главу учебника. Особенно раздел про игровой цикл и переменные.
2.1. ВВЕДЕНИЕ: ОТ ОКНА К ИГРЕ
Привет! В прошлый раз ты создал игровое окно — прямоугольник, который открывается и закрывается. Это как построить театральную сцену: занавес, свет, декорации готовы.
Но где же актёры?
Сцена без актёров — это просто помещение. Игра без героя — это просто окно.
Задачи второго урока: Добавить на сцену главного героя. Пока это будет простой квадрат, но уже на этом этапе ты научишься:
Рисовать объекты.
Хранить их характеристики в переменных.
Двигать их по экрану.
К концу урока у тебя будет анимация: квадрат перемещается по экрану самостоятельно. А на Уроке 3 ты добавишь управление с клавиатуры!
2.2. ПОДГОТОВКА ПРОЕКТА
Не начинай с нуля! Мы будем развивать код из Главы 1.
Шаг 1. Создай копию файла
Открой папку
Lesson1в VS Code.Найди файл
main.py.Нажми на него правой кнопкой мыши → Copy (Копировать).
Нажми правой кнопкой на пустое место → Paste (Вставить).
Переименуй новый файл в
main.py(если спросит — замени старый) ИЛИ создай новую папкуLesson2и скопируй файл туда.
ПРАВИЛО БЕЗОПАСНОСТИ: Всегда сохраняй рабочую версию кода перед внесением изменений. Называй копию
main_backup.py.
Шаг 2. Проверь запуск
Открой
main.pyв VS Code.Нажми
F5или кнопку ▶️.Убедись, что окно открывается и закрывается без ошибок.
Если что-то не работает — вернись к Главе 1, раздел «Частые ошибки».
2.3. ТИПЫ ДАННЫХ: ЧИСЛА И ТЕКСТ
В Главе 1 мы использовали переменные, но не говорили о типах данных. Пора это исправить.
Что такое тип данных?
Компьютер должен понимать, что именно хранится в переменной. От этого зависит, что можно делать с этой переменной.
| Тип | Название | Пример | Что можно делать |
|---|---|---|---|
| Целое число |
| Складывать, умножать, сравнивать |
| Строка (текст) |
| Соединять, выводить на экран |
| Дробное число |
| Точные вычисления (скорость) |
| Логический |
| Проверять условия |
Пример в коде:
# int - целые числа
player_x = 100
player_speed = 5
# str - строки (всегда в кавычках!)
player_name = "Hero"
game_title = "Моя Игра"
# float - дробные числа
gravity = 9.8
# bool - истина/ложь
is_alive = True
Важное правило:
# ПРАВИЛЬНО:
name = "Alex" # Текст в кавычках
age = 12 # Число без кавычек
# НЕПРАВИЛЬНО:
name = Alex # Ошибка! Компьютер подумает, что Alex это какая-то другая переменная
age = "12" # Работает, но это текст, а не число (нельзя умножать)
💡 ЗАПОМНИ: Если хочешь хранить текст — используй кавычки. Если число — не используй кавычки.
2.4. СИСТЕМА КООРДИНАТ: ГДЕ НАХОДИТСЯ ИГРОК?
В математике ты привык, что ось Y в системе координат идёт вверх. В играх всё наоборот!

| Координата | Значение | Где находится |
|---|---|---|
| X=0, Y=0 | Левый верхний угол |
| X=800, Y=0 | Правый верхний угол |
| X=0, Y=600 | Левый нижний угол |
| X=800, Y=600 | Правый нижний угол |
Почему так?
Это исторически сложилось в компьютерной графике. Память экрана заполняется сверху вниз, строка за строкой. Поэтому (0, 0) — это начало памяти, то есть верхний левый угол.
2.5. РИСУЕМ ПЕРВОГО ИГРОКА
Добавим квадрат в наше окно. Для этого используем функцию pygame.draw.rect().
Код игрока:
Открой main.py и найди место после screen.fill(COLOR) и до pygame.display.flip().
Добавь эти строки:
# ------- НАСТРОЙКИ ИГРОКА -------
player_x = 100 # Позиция по X
player_y = 100 # Позиция по Y
player_width = 50 # Ширина квадрата
player_height = 50 # Высота квадрата
player_color = (255, 0, 0) # Красный цвет (RGB)
player_speed = 5 # Скорость движения (пикселей за кадр)
# --------------------------------
# ... (код внутри цикла while) ...
# Закрашивание экрана цветом
screen.fill(COLOR)
# === РИСУЕМ ИГРОКА ===
player_rect = pygame.Rect(player_x, player_y, player_width, player_height)
pygame.draw.rect(screen, player_color, player_rect)
# =====================
# Обновление экрана (показываем новый кадр)
pygame.display.flip()
Разбор кода:
| Строка | Что делает |
|---|---|
| Создаёт «прямоугольник» в памяти (невидимый) |
| Координаты левого верхнего угла квадрата |
| Размеры квадрата |
| Рисует прямоугольник на экране |
| Поверхность, на которой рисуем (наше окно) |
| Цвет квадрата |
| Сам прямоугольник (где и какого размера) |
Небольшое задание:
Измени
player_colorна(0, 255, 0)— квадрат станет зелёным.Измени
player_widthна100— квадрат станет шире.Измени
player_xна400— квадрат сместится вправо.
Запусти код после каждого изменения! Так ты почувствуешь, как переменные влияют на результат.
2.6. ДВИЖЕНИЕ: ЗАСТАВЛЯЕМ КВАДРАТ ДВИГАТЬСЯ
Пока квадрат стоит на месте. Добавим движение!
Логика движения:
Чтобы объект двигался, нужно менять его координаты каждый кадр.
player_x = player_x + player_speed
Это читается как: «Возьми текущий player_x, прибавь к нему player_speed, и положи результат обратно в player_x».
Добавляем движение в код:
Вставь эту строку перед отрисовкой игрока (но после screen.fill(COLOR)):
# Закрашивание экрана цветом
screen.fill(COLOR)
# === ОБНОВЛЯЕМ ПОЗИЦИЮ ===
player_x = player_x + player_speed
# =========================
# === РИСУЕМ ИГРОКА ===
player_rect = pygame.Rect(player_x, player_y, player_width, player_height)
pygame.draw.rect(screen, player_color, player_rect)
# =====================
# Обновление экрана
pygame.display.flip()
Что произойдёт:
Каждый кадр (60 раз в секунду)
player_xувеличивается на 5.Квадрат движется вправо.
Когда достигнет края экрана — исчезнет! (потому что уйдёт за пределы видимой области)
Проблема: квадрат улетает за экран
Это нормально для этого урока. На Уроке 3 мы добавим проверку границ и возврат игрока.
2.7. ПОЛНЫЙ КОД УРОКА 2
Скопируй этот код, если что-то не работает:
import pygame
import sys
# ------- НАСТРОЙКИ ИГРЫ -------
WIDTH = 800
HEIGHT = 600
TITLE = "Моя Первая Игра"
COLOR = (135, 206, 235)
# ------------------------------
# ------- НАСТРОЙКИ ИГРОКА -------
player_x = 100
player_y = 100
player_width = 50
player_height = 50
player_color = (255, 0, 0)
player_speed = 5
# --------------------------------
# Инициализация движка
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption(TITLE)
# Игровой цикл
running = True
while running:
# Проверка событий
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Закрашивание экрана
screen.fill(COLOR)
# Обновление позиции игрока
player_x = player_x + player_speed
# Рисуем игрока
player_rect = pygame.Rect(player_x, player_y, player_width, player_height)
pygame.draw.rect(screen, player_color, player_rect)
# Обновление экрана
pygame.display.flip()
# Завершение работы
pygame.quit()
sys.exit()
2.8. ПРАКТИЧЕСКИЕ ЗАДАНИЯ
Выполни эти задания, чтобы закрепить материал.
Задание 1. «Дизайнер»
Измени
player_colorна синий(0, 0, 255).Измени
player_widthиplayer_heightна80.Вопрос: Что будет, если сделать ширину 0? Попробуй!
Задание 2. «Гонщик»
Измени
player_speedна10.Запусти игру — квадрат движется быстрее.
Измени
player_speedна-5.Вопрос: Куда движется квадрат теперь? Почему?
Задание 3. «Стартовая позиция»
Измени
player_xна400(центр экрана по горизонтали).Измени
player_yна300(центр экрана по вертикали).Вопрос: Почему квадрат не ровно в центре? (Подсказка: учти размер квадрата!)
Задание 4. «Двойной игрок» (для продвинутых)
Создай второго игрока с переменными
player2_x,player2_y,player2_color.Нарисуй второй квадрат другим цветом.
Запусти — оба квадрата движутся!
2.9. ДОМАШНЕЕ ЗАДАНИЕ
| № | Задание | Баллы |
|---|---|---|
| 1 | Запустить код из урока без ошибок | 2 |
| 2 | Изменить размер окна на 1024×768 | 1 |
| 3 | Изменить размер игрока на 60×60 | 1 |
| 4 | Изменить цвет игрока на свой любимый | 2 |
| 5 | Изменить стартовую позицию (X, Y) | 2 |
| 6 | Изменить скорость движения | 1 |
| 7 | Сделать скриншот и отправить в чат | 1 |
ИТОГО | 10 |
Как сдать:
Сделай скриншот окна с движущимся квадратом:
Windows:
Win + Shift + SMac:
Command + Shift + 4
Сохрани файл как
Lesson2_ТвоёИмя.png.Отправь файл в чат группы.
Если возникла ошибка — сделай скриншот текста ошибки и отправь с вопросом.
🏆 БОНУС: Если выполнишь Задание 4 («Двойной игрок») — получишь +3 балла сверх нормы!
2.10. ПРОВЕРЬ СЕБЯ
Ответь на вопросы перед выполнением ДЗ.
Какой тип данных у переменной
player_speed = 5?Где находится точка (0, 0) на игровом экране?
Что означает
player_x = player_x + 1?В какую сторону движется квадрат при
player_speed = -3?Что будет, если убрать
screen.fill(COLOR)?
Нажми, чтобы увидеть ответы
int(целое число)В левом верхнем углу
Увеличить позицию игрока на 1 пиксель вправо
Влево (X уменьшается)
На экране останется «шлейф» от предыдущих кадров
2.11. ЧАСТЫЕ ОШИБКИ И ИХ РЕШЕНИЕ
| Проблема | Причина | Решение |
|---|---|---|
| Квадрат не виден | Цвет совпадает с фоном | Измени player_color на контрастный |
| Квадрат не движется | Строка движения не в цикле | Проверь отступы! Движение должно быть внутри while |
Ошибка NameError | Опечатка в имени переменной | Проверь, везде ли player_x написан одинаково |
| Квадрат «мигает» |
| Перемести fill() перед отрисовкой игрока |
| Движение слишком быстрое |
| Уменьши скорость до 3-5 для плавности |
Ошибка Rect | Забыл запятые в pygame.Rect() | Проверь: Rect(x, y, width, height) |
2.12. ГЛОССАРИЙ ГЛАВЫ
Тип данных (Data Type) — категория значения (число, текст, истина/ложь).
int (integer) — целое число (5, 100, -3).
str (string) — строка текста ("Привет", "Hero"). Всегда в кавычках.
Координаты (Coordinates) — пара чисел (X, Y), определяющая позицию на экране.
pygame.Rect — объект прямоугольника (используется для отрисовки и столкновений).
pygame.draw.rect() — функция для рисования прямоугольника на экране.
Скорость (Speed) — насколько меняется позиция объекта за один кадр.
ЗАКЛЮЧЕНИЕ: ЧТО ДАЛЬШЕ?
Ты сделал это! Теперь у тебя есть:
Игровое окно.
Игрок (квадрат).
Движение по экрану.
Но есть проблема: игрок движется сам по себе и улетает за экран. Ты не можешь им управлять.
В Главе 3 мы исправим это:
| Что будет | Зачем это нужно |
|---|---|
| Обработка нажатий клавиш | Игрок слушается тебя |
Условия if/else | Проверка: нажата ли кнопка? |
| Остановка у границ | Игрок не улетит за экран |
| Управление WASD/стрелками | Как в настоящих играх |
💡 СОВЕТ: Не удаляй файл
main.py. Создай копиюLesson2_backup.py. В программировании всегда полезно иметь резервную версию рабочего кода!
До встречи на Уроке 3! Там начнётся настоящая магия — ты сможешь управлять игрой своими руками. 🎮
📌 ГЛАВНОЕ С УРОКА 2
Типы данных: Числа (
int) без кавычек, текст (str) в кавычках.Координаты: (0, 0) — левый верхний угол, Y растёт вниз.
Движение: Меняй координаты каждый кадр (
x = x + speed).Порядок в цикле:
fill()→ обновление позиции → отрисовка →flip().
Учебник подготовлен для курса «Python через создание игр».