Методичка · Консольная текстовая игра · Python

Побег из замка: учителю

Ребёнок читает историю в консоли и вводит команды словами. Графического окна здесь нет. Мы разбираем готовый квест по частям, чтобы понять, как Python хранит состояние и принимает решения.

01

За 30 секунд

Чтобы быстро решить, подходит ли проект для занятия.

Что делает ребёнок

Игрок переходит между комнатами, осматривает их, собирает предметы в рюкзак, встречает врагов и следит за HP. Порядок находок случаен, поэтому прохождения отличаются.

К чему стремится

Найти меч и отмычку, попасть на чердак, победить дракона и открыть выход. Здоровье может закончиться раньше — тогда игра проиграна.

Кому подходит

После первых команд Python или для повторения основ. Случайные события и несколько условий делают этот проект сложнее «Космической экспедиции».

Формат

10 занятий по 35–45 минут; 1–2 шага и три коротких задания в каждом. Можно идти медленнее и делить урок на два занятия.

Как представить проект детям

«Сегодня мы не будем переписывать большую игру целиком. Сначала сыграем в неё, затем возьмём одну маленькую деталь — например, вопрос игроку — и соберём такую же сами. К концу курса мы сможем объяснить, почему игра помнит комнаты, предметы и здоровье.»

Что дети освоят

02

Первое занятие

Готовый сценарий на 45 минут, который можно взять прямо в класс.

Перед началом

  • Откройте полную игру в онлайн IDE или запустите скачанный .py в Python IDLE.
  • Для живого диалога с игрой удобнее IDLE: в онлайн IDE ответы для input() нужно записать заранее, по строке на каждый вопрос.
  • Проверьте урок 1 и кнопку «Запустить в IDE». Подготовьте названия комнат и предметов на доске или карточках.
  • Не обещайте одинаковое прохождение: random.choice() выдаёт предметы в разном порядке.
  1. 0–5 мин
    Покажите игру

    Введите «осмотреть», затем «идти». Пусть дети назовут, что игра уже запомнила: комнату, предмет, HP.

  2. 5–10 мин
    Объясните идею

    Это история с правилами. print() говорит с игроком, input() слушает ответ.

  3. 10–25 мин
    Разберите урок 1

    Пройдите два примера построчно; после каждой строки спросите, что появится на экране.

  4. 25–38 мин
    Дайте изменения

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

  5. 38–45 мин
    Подведите итог

    Попросите объяснить разницу между текстом в кавычках и переменной без кавычек.

Скачать код полной игры
03

Карта всех уроков

Одна тема, один вопрос классу и одна методическая подсказка на каждый шаг.

01

Привет, замок!

Показываем текст и спрашиваем игрока, что делать.

print() · input()

Цель: Запустить первый диалог с игроком в IDLE.

Спросите: Зачем текст пишут в кавычках?

Ожидаемый ответ: Так Python понимает, что это готовое сообщение, а не имя переменной.

Подсказка: Попросите детей предсказать, что случится, если убрать кавычки вокруг текста. Затем запустите код и обсудите ошибку.

02

Состояние игрока

Храним здоровье, комнату и число ходов в переменных.

переменные · числа · строки

Цель: Понять, как игра запоминает изменения между ходами.

Спросите: Что станет с HP после hp -= 2?

Ожидаемый ответ: Старое число уменьшится на два; при 10 получится 8.

Подсказка: Спросите: чем отличаются строки «10» и число 10? Покажите, что из числа можно вычитать, а текст комнаты можно напечатать.

03

Комнаты и рюкзак

Собираем списки комнат и найденных предметов.

список · append() · in

Цель: Добавлять предметы и проверять, что уже лежит в рюкзаке.

Спросите: Что меняется после inventory.append("карта")?

Ожидаемый ответ: В исходный список добавляется предмет «карта».

Подсказка: Попросите ребёнка назвать результат выражения «карта» in inventory до запуска. Не путайте предметы с их описаниями: описания появятся в уроке о словарях.

04

Выбор пути

Проверяем команду и не пускаем в несуществующую комнату.

if · elif · else

Цель: Сделать первый осмысленный выбор игрока.

Спросите: Почему для сравнения команды нужны два знака ==?

Ожидаемый ответ: == сравнивает, а один = записывает значение в переменную.

Подсказка: Проверьте три ответа: правильная команда, слово с заглавной буквы, неизвестное слово. Спросите, почему здесь важны отступы.

05

Игровой цикл

Возвращаемся к вопросу после каждого действия.

while · break

Цель: Сделать так, чтобы игра не заканчивалась после одной команды.

Спросите: Почему игра снова спрашивает команду?

Ожидаемый ответ: Вопрос находится внутри цикла while; break или проигрыш останавливает его.

Подсказка: Обязательно покажите, как остановить программу в IDLE через Shell → Interrupt Execution, если ребёнок запустил бесконечный цикл.

06

Функция статуса

Выносим повторяющийся вывод в отдельную команду.

def · параметры · вызов

Цель: Написать функцию, которая показывает состояние героя.

Спросите: Когда выполняется код функции?

Ожидаемый ответ: Когда мы вызываем её по имени со скобками; при def только описываем.

Подсказка: Разделите на доске определение функции и её вызов: при def действие только описывается; при show_status(...) оно выполняется.

07

Словарь предметов

Связываем название находки с её описанием.

словарь · ключ · значение

Цель: Узнавать описание предмета по его названию.

Спросите: Как словарь находит описание предмета?

Ожидаемый ответ: По ключу — имени предмета, например ITEMS["карта"].

Подсказка: Сравните словарь со списком: в списке мы ищем элемент по номеру, а в словаре — по ключу-имени. Покажите, что неизвестный ключ вызывает ошибку.

08

Случайная находка

Выбираем новый предмет так, чтобы он не повторился.

for · not in · random.choice()

Цель: Сделать функцию поиска предмета для осмотра комнаты.

Спросите: Почему нельзя выбрать случайный элемент пустого списка?

Ожидаемый ответ: В нём нет вариантов; сначала нужно проверить, что список не пустой.

Подсказка: Спросите, что произойдёт, если вызвать random.choice([]). Пусть дети добавят проверку пустого списка до выбора.

09

Лечение и return

Используем аптечку и возвращаем новое здоровье.

функция · return · min()

Цель: Передать здоровье в функцию и получить обновлённое значение.

Спросите: Чем return отличается от print()?

Ожидаемый ответ: return передаёт значение вызывающему коду, а print() лишь показывает его.

Подсказка: Особенно важно показать разницу между print и return: print только показывает число, а return позволяет сохранить его в переменной снаружи функции.

10

Враги и победа

Добавляем случайную встречу и проверяем условие побега.

случайность · логика · сборка

Цель: Связать изученные части с готовой игрой.

Спросите: Какие условия нужны для победы?

Ожидаемый ответ: Игрок на чердаке, отмычка в рюкзаке, дракон побеждён.

Подсказка: На этом уроке предложите детям сначала предсказать исход трёх вариантов кода, затем открыть полную игру и найти знакомые конструкции.

04

Если что-то пошло не так

Типичные места, на которых дети останавливаются.

Игра ждёт ответ

В онлайн IDE запишите ответы в правое поле по одному на строку. В IDLE вводите их в консоли по ходу игры.

Разные находки

Случайный предмет — часть механики. Сравните два прохождения, не ищите один «правильный» вывод.

Отступы

После if, while и def строки внутри блока начинаются с четырёх пробелов. Покажите это на коротком примере.

Большой файл пугает

Открывайте полный исходник как карту знакомых деталей; не требуйте от детей набирать его за одно занятие.

Открыть первый урок Вернуться к проекту