Поздравляем! Ты прошёл долгий путь в изучении Python. Теперь пора применить все полученные знания в одном большом проекте — создании текстового квеста (текстовой приключенческой игры).
Текстовый квест — это игра, где игрок читает описания локаций, принимает решения и исследует мир через текст. Это отличный способ объединить всё изученное: классы и объекты, списки, словари, функции, работа с файлами и многое другое.
Цель проекта
Создать полноценную текстовую приключенческую игру, которая включает:
Систему локаций (комнат)
Игрока с инвентарём
Сохранение и загрузку игры
Меню и навигацию
Использование ООП для структуры игры
Что понадобится
Классы и объекты (Room, Player, Game)
Списки для инвентаря
Словари для описаний локаций
Функции для работы с файлами (сохранение/загрузка)
Условные конструкции для меню
Циклы для игрового цикла
Этап 1. Класс Player (Игрок)
Начнём с создания класса игрока, который будет хранить информацию о персонаже и его инвентаре.
class Player: def __init__(self, name): self.name = name self.inventory = [] # Список предметов self.current_room = "start" # Текущая локация self.health = 100 # Здоровье def add_item(self, item): """Добавляет предмет в инвентарь""" self.inventory.append(item) print(f"Добавлен предмет: {item}") def has_item(self, item): """Проверяет, есть ли предмет в инвентаре""" return item in self.inventory def show_inventory(self): """Показывает инвентарь игрока""" if self.inventory: print(f"Инвентарь: {', '.join(self.inventory)}") else: print("Инвентарь пуст") def info(self): """Показывает информацию об игроке""" print(f"Игрок: {self.name}") print(f"Здоровье: {self.health}") self.show_inventory()
Этап 2. Класс Room (Комната)
Создадим класс для локаций в игре.
class Room: def __init__(self, name, description): self.name = name self.description = description self.exits = {} # Словарь: направление -> название комнаты self.items = [] # Предметы в комнате def add_exit(self, direction, room_name): """Добавляет выход из комнаты"""
Этап 3. Класс Game (Игра)
Главный класс игры, который управляет всем процессом.
class Game: def __init__(self): self.player = None self.rooms = {} self.running = True def create_rooms(self): """Создаёт все комнаты игры""" # Стартовая комната start = Room("Стартовая комната", "Ты находишься в небольшой комнате с каменными стенами. " "На столе лежит старый фонарик.")
Этап 4. Запуск игры
Создаём главную функцию для запуска:
def main(): game = Game() game.run()if __name__ == "__main__": main()
Этап 5. Улучшения (опционально)
Добавление здоровья и боевой системы
def take_damage(self, amount): """Наносит урон игроку""" self.health -= amount if self.health <= 0: self.health = 0 print("Вы погибли! Игра окончена.") else: print(f"Вы получили {amount} урона. Здоровье: {self.health}")
Добавление использования предметов
def use_item(self, item): """Использует предмет""" if not self.has_item(item): print("У вас нет этого предмета!") return if item == "яблоко": self.heal(20) self.inventory.remove(item) print("Вы съели яблоко и восстановили здоровье!"
Добавление условий для прохождения
def check_win_condition(self): """Проверяет условия победы""" if (self.player.current_room == "зал" and self.player.has_item("ключ")): print("\n🎉 ПОЗДРАВЛЯЕМ! Вы нашли ключ и прошли квест!") return True return False
В этом проекте мы создали полноценную текстовую игру, используя:
Классы и объекты для структуры игры
Списки для инвентаря
Словари для хранения комнат и выходов
Файлы для сохранения и загрузки игры
Функции и методы для организации кода
Циклы и условия для игровой логики
Этот проект объединяет все изученные концепции Python в одном практическом приложении!
Домашнее задание
Упражнение №1
Создай класс Player с атрибутами name, inventory (список), health (100) и current_room ("start"). Добавь методы add_item(item), has_item(item) и show_inventory().
Упражнение №2
Создай класс Room с атрибутами name, description, exits (словарь) и items (список). Добавь методы add_exit(direction, room_name), add_item(item) и show_info() для вывода информации о комнате.
Упражнение №3
Создай класс Game с методом create_rooms(), который создаёт минимум 3 комнаты с выходами между ними. Сохрани комнаты в словаре self.rooms.
Упражнение №4
Добавь в класс Game методы:
move(direction) — перемещает игрока в другую комнату
take_item(item) — берёт предмет из текущей комнаты и добавляет в инвентарь
show_current_room() — показывает информацию о текущей комнате
Упражнение №5
Реализуй метод save_game(filename) в классе Game, который сохраняет состояние игры (имя игрока, текущую комнату, здоровье и инвентарь) в файл.
Упражнение №6
Реализуй метод load_game(filename) в классе Game, который загружает состояние игры из файла и восстанавливает объект игрока.
Упражнение №7
Создай метод process_command(command) в классе Game, который обрабатывает команды игрока:
идти [направление] — перемещение
взять [предмет] — взять предмет
инвентарь — показать инвентарь
осмотреться — описание комнаты
выход — завершить игру
Упражнение №8 (бонус)
Создай полноценную игру с игровым циклом:
Метод start_game() — создаёт игрока
Метод run() — главный игровой цикл
Обработка всех команд
Возможность сохранения и загрузки
Добавь минимум 5 комнат и несколько предметов. Создай условие победы (например, найти определённый предмет в определённой комнате).
Упражнение №9. Враги и combat БОНУС
Добавь класс Enemy с name, health, damage. В некоторых комнатах размести врагов. Команда атаковать [имя] — игрок наносит урон врагу, враг отвечает. Победа при health врага ≤ 0. Используй предметы (меч) для увеличения урона.
Упражнение №10. Загрузка мира из файла БОНУС
Реализуй загрузку описания мира из JSON или текстового файла: комнаты, выходы, предметы. Парси файл при старте и создавай объекты Room динамически. Это позволит расширять игру без изменения кода.