Текстовый квест 'Подземелье' | Практика 2
Вот практическое задание, разработанное специально для закрепления темы «Сложные условия» в интерактивном формате.
---
# Практическое задание: Текстовый квест «Подземелье Алхимика»
**Тема:** Сложные условия (`elif`) и логические связки (`and`, `or`, `not`).
**Время выполнения:** 30–40 минут.
**Инструменты:** Любая среда разработки (IDLE, PyCharm, Replit, VS Code).
---
## 🧙♂️ Легенда
Вы — разработчик игр. Вам нужно написать логику для текстового квеста, где герой исследует старое подземелье. Исход битв и событий зависит не только от выбора игрока, но и от того, что лежит у него в рюкзаке.
**Ваша цель:** Написать программу, которая корректно обрабатывает ситуации, используя сложные условия.
---
## ЭТАП 1. Подготовка героя (Разминка)
*Здесь мы создадим переменные, которые будут влиять на условия в игре.*
**Задание:**
Создайте новый файл `dungeon.py`. В самом начале программы задайте начальные характеристики героя, используя переменные.
Представим, что игрок в начале игры нашел ржавый меч, но у него нет магического кристалла.
**Код для вставки:**
```python
print("--- НАЧАЛО ИГРЫ ---")
# Инвентарь героя (True - есть предмет, False - нет)
has_sword = True
has_magic = False
# Характеристика героя
hp = 100 # Здоровье
```
---
## ЭТАП 2. Развилка судьбы (Использование `if/else`)
*Герой подходит к развилке. Ему нужно выбрать путь.*
**Задание:**
1. Запросите у игрока ввод: «Куда вы пойдете? (налево/направо)».
2. Напишите условие:
* Если игрок выбрал **"налево"**: выведите «Вы нашли щит!» и измените переменную `hp`, добавив 20 очков (не забудьте вывести новое здоровье).
* Если игрок выбрал **"направо"**: выведите «Вы упали в яму!» и отнимите 30 очков здоровья.
* **Важно:** Если игрок ввел что-то другое (например, "прямо"), выведите «Вы стоите на месте и теряете время».
---
## ЭТАП 3. Встреча с Гоблином (Связка `and`)
*Герой встречает врага. Победить можно только при определенных условиях.*
**Сценарий:**
Перед героем Гоблин. Игрок может выбрать действие: **"атака"** или **"бег"**.
* Чтобы победить в атаке, у героя должен быть меч (`has_sword`).
* Если меча нет, атака приведет к поражению.
**Задание:**
Реализуйте битву, используя конструкцию `if ... elif ... else` и оператор `and`.
**Инструкция:**
1. Запросите ввод: «Гоблин атакует! Ваши действия? (атака/бег)».
2. Напишите логику:
* **Условие 1:** Если выбор **"атака"** И (`and`) у героя **есть меч** (`has_sword` равно `True`) — выведите «Победа! Вы одолели гоблина мечом».
* **Условие 2 (`elif`):** Если выбор **"атака"** И (`and`) у героя **нет меча** (`not has_sword` или `has_sword == False`) — выведите «Вы пытались ударить рукой, но гоблин сильнее. Вы погибли. GAME OVER».
* **Условие 3 (`elif`):** Если выбор **"бег"** — выведите «Вы сбежали, но потеряли честь».
* **Иначе (`else`):** «Гоблин не понял вашего действия и просто ударил вас дубиной».
---
## ЭТАП 4. Дверь сокровищницы (Связка `or`)
*Герой добрался до финальной двери. Она заперта.*
**Сценарий:**
Дверь можно открыть двумя способами:
1. Если у героя есть **магия** (`has_magic`).
2. Если герой знает **пароль** ("1234").
**Задание:**
Реализуйте проверку открытия двери, используя оператор `or`.
**Инструкция:**
1. Спросите у игрока: «Введите пароль от двери (если знаете): ». Сохраните ответ в переменную `password`.
2. Напишите одно сложное условие:
* Если введенный `password` равен "1234" **ИЛИ** (`or`) переменная `has_magic` равна `True`.
* Тогда выведите: «Дверь со скрипом отворилась! Вы нашли сокровища!».
* Иначе: «Дверь не поддается. Вы остались ни с чем».
---
## ЭТАП 5. Тестирование и отладка (Анализ)
Запустите вашу игру 3 раза с разными сценариями, чтобы проверить все ветки условий.
1. **Сценарий "Воин":** В начале кода поставьте `has_sword = True`, `has_magic = False`. Выберите "атака" в битве и не вводите пароль в конце.
* *Ожидаемый результат:* Победа над гоблином, но дверь закрыта.
2. **Сценарий "Маг-пацифист":** Поставьте `has_sword = False`, `has_magic = True`. Выберите "атака" в битве.
* *Ожидаемый результат:* Поражение от гоблина (GAME OVER).
3. **Сценарий "Хитрый":** Поставьте `has_sword = True`, `has_magic = False`. Победите гоблина и введите пароль "1234".
* *Ожидаемый результат:* Полная победа.
---
### 💡 Подсказка для самопроверки
Ваш код для этапа 3 должен выглядеть примерно так (попробуйте сначала написать сами!):
```python
choice = input("Гоблин атакует! (атака/бег): ")
if choice == "атака" and has_sword:
print("Победа! Меч пригодился.")
elif choice == "атака" and not has_sword:
print("Без оружия атаковать глупо. Вы проиграли.")
elif choice == "бег":
print("Вы убежали.")
else:
print("Непонятная команда.")
```
**Удачи, юный программист!**