McBin

Текстовый квест 'Подземелье' | Практика 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("Непонятная команда.")
```

**Удачи, юный программист!**
Copied to clipboard!