📖 Содержание
Часть 1: Мир программирования вокруг нас
Часть 2: Алфавит и словарь программирования
Часть 3: Строим первые программы
Часть 4: Наш удивительный мозг
Часть 5: Творческие проекты
Часть 6: Программирование в реальном мире
Глава 18 из 27
5: Творческие проекты
Глава 18: "Наша история с выбором пути"
После насыщенного дня в технопарке Алиса и Профессор Бит решили отдохнуть в уютном кафе неподалёку. Байт с удовольствием занял место у розетки, чтобы подзарядить батареи, а Логик устроилась прямо на спинке стула Алисы.
— Знаешь, Алиса, — начал Профессор, задумчиво помешивая чай, — всё, что мы узнали о программировании и работе мозга, можно отлично применить в творчестве. И сегодня я хочу предложить тебе создать кое-что особенное — интерактивную историю с разветвлённым сюжетом.
— Как в книгах-играх? — оживилась Алиса. — Я читала такую! Там на каждой странице нужно было выбирать, что делать дальше, и перелистывать на разные главы в зависимости от выбора.
— Именно! — кивнул Профессор. — Только мы создадим свою собственную цифровую версию такой истории с помощью кода.
Он отложил ложечку, посмотрел в окно на спешащих прохожих и негромко произнёс:
Вся наша жизнь — невидимый маршрут,
Где каждый шаг рождает новый вектор.
Куда твои решения ведут?
В какой из неразведанных проектов?
Налево шаг — и встретишь чудеса,
Направо шаг — и ждут тебя загадки.
Твой выбор направляет паруса,
Меняя мир в заложенном порядке.
И, словно ветви мощного ствола,
Растут сюжеты, множа варианты.
Твоя игра сегодня ожила,
Раскрыв в тебе незримые таланты!
Профессор достал планшет и открыл редактор кода:

— Интерактивная история — это идеальный способ на практике применить условные конструкции, которые мы изучали. Помнишь, как работают условия if-else?
— Да! — кивнула Алиса. — Если условие выполняется, то происходит одно действие, а если нет — другое.
— Верно, — улыбнулся Профессор. — А в историях с выбором пути эти условия определяют, по какой ветке пойдёт сюжет. Давай начнём с самого простого примера:
python
print("Ты стоишь на развилке в тёмном лесу. Тропинка расходится влево и вправо.")
выбор = input("Куда ты пойдёшь? (влево/вправо): ")if выбор.lower() == "влево":
print("Ты пошёл влево и вышел к тихой речке.")
# Здесь будет продолжение истории для левого пути
elif выбор.lower() == "вправо":
print("Ты пошёл вправо и обнаружил старую хижину.")
# Здесь будет продолжение истории для правого пути
else:
print("Ты замешкался, не зная, куда идти. Внезапно поднялся ветер...")
# Здесь будет продолжение, если игрок ввёл что-то непонятное
— Видишь, как здесь работают условия? — спросил Профессор. — В зависимости от ответа пользователя история пойдёт по одному из трёх путей.
— А что делает команда .lower()? — спросила Алиса, внимательно изучая код.
— Очень хороший вопрос! — похвалил Профессор. — Это метод, который превращает любой текст в маленькие буквы (нижний регистр). Благодаря ему программа правильно поймёт игрока, даже если он напишет "Влево" с большой буквы или нажмёт Caps Lock и введёт "ВЛЕВО".
— А как сделать историю длиннее? — поинтересовалась Алиса. — Ведь после каждого шага должны появляться всё новые и новые варианты.
— Для этого мы будем использовать функции, — объяснил Профессор. — Каждая функция def будет представлять отдельную "сцену" нашей истории:
python
def начало():
print("Ты стоишь на развилке в тёмном лесу. Тропинка расходится влево и вправо.")
выбор = input("Куда ты пойдёшь? (влево/вправо): ") if выбор.lower() == "влево":
река()
elif выбор.lower() == "вправо":
хижина()
else:
ветер()
def река():
print("Ты пошёл влево и вышел к тихой речке. Ты видишь лодку и хлипкий мост.")
выбор = input("Что ты выберешь? (лодка/мост): ")
if выбор.lower() == "лодка":
лодка()
elif выбор.lower() == "мост":
мост()
else:
берег()
И так далее для каждой новой сцены...
— А, теперь понятно! — воскликнула Алиса. — Каждая функция — это как отдельная страница в книге-игре. И в зависимости от выбора мы переходим к разным функциям, как к разным страницам.
— В точку! — подтвердил Профессор. — И наша история может иметь десятки разветвлений и концовок. Смотри, вот схема простой истории:
text
начало
├── река
│ ├── лодка
│ │ ├── остров
│ │ └── водопад
│ └── мост
│ ├── деревня
│ └── тролль
└── хижина
├── войти
│ ├── добрая_ведьма
│ └── злая_ведьма
└── мимо
├── гора
└── поляна
— Похоже на дерево! — заметила Алиса. — Каждый выбор — это узел, а варианты ответа — это ветви.
— Отличное сравнение, — кивнул Профессор. — И, что интересно, эта структура очень похожа на то, как работает наш собственный мозг при принятии решений. Мы анализируем возможные варианты и их последствия на несколько шагов вперёд.
Байт мигнул экраном и вывел на него новый фрагмент кода:
— А вот как можно добавить в историю крутые игровые элементы! Например, рюкзак (инвентарь) и проверку того, есть ли у игрока нужный предмет:
python
инвентарь = [] # Пустой список для предметов игрокаdef хижина():
print("Ты подходишь к старой хижине. Дверь слегка приоткрыта.")
if "факел" in инвентарь:
print("У тебя есть факел, с которым не так страшно заходить в тёмные места.")
else:
print("Внутри кромешная тьма, и тебе немного страшно.")
выбор = input("Войти в хижину или пройти мимо? (войти/мимо): ")
if выбор.lower() == "войти":
if "факел" in инвентарь:
print("Ты уверенно освещаешь путь факелом.")
добрая_ведьма()
else:
print("В темноте ты спотыкаешься о ведро и сильно шумишь.")
злая_ведьма()
elif выбор.lower() == "мимо":
print("Ты решаешь не рисковать и идёшь дальше.")
развилкаухижины()
else:
print("Пока ты колеблешься, дверь хижины резко открывается...")
встречасведьмой()
— Видишь, — пояснил Профессор, — теперь развитие сюжета зависит не только от того, что игрок выбрал прямо сейчас, но и от его прошлых действий. Если он нашёл факел в самом начале игры, встреча с ведьмой пройдёт совершенно иначе.
— Это как причинно-следственные связи в реальной жизни! — заметила Алиса. — Наши прошлые решения влияют на будущие события.
— Очень тонкое наблюдение, — одобрительно чирикнула Логик. — Такие игры учат анализировать последствия своих выборов и принимать ответственные решения.
— А можно добавить в историю какую-нибудь случайность? — глаза Алисы загорелись азартом. — Чтобы не абсолютно всё зависело от игрока, а была доля везения?
— Конечно! — улыбнулся Профессор. — Для этого в Python есть специальный модуль random. Давай напишем функцию настоящей битвы с монстром:
python
import randomdef битва():
здоровье_игрока = 100
здоровье_монстра = 80
print("Из кустов выпрыгнул страшный монстр! Началась битва!")
# Бой продолжается, пока оба живы
while здоровьеигрока > 0 and здоровьемонстра > 0:
выбор = input("Что ты сделаешь? (атака/защита/побег): ")
if выбор.lower() == "атака":
урон_игрока = random.randint(10, 25) # Случайный урон от 10 до 25
здоровьемонстра -= уронигрока
print(f"Ты бьёшь мечом и наносишь монстру {урон_игрока} урона!")
if здоровье_монстра > 0:
урон_монстра = random.randint(5, 15) # Ответный удар
здоровьеигрока -= уронмонстра
print(f"Монстр атакует в ответ и наносит {урон_монстра} урона!")
elif выбор.lower() == "защита":
урон_монстра = random.randint(1, 10) # Урон снижен благодаря защите
здоровьеигрока -= уронмонстра
print(f"Ты ставишь блок! Монстр наносит всего {урон_монстра} урона.")
elif выбор.lower() == "побег":
шанс_побега = random.random() # Случайное число от 0.0 до 1.0
if шанс_побега > 0.7: # 30% шанс на успешный побег
print("Тебе удалось ловко сбежать!")
лес()
return # Завершаем функцию битвы
else:
print("Побег не удался! Монстр хватает тебя за плащ!")
урон_монстра = random.randint(10, 20)
здоровьеигрока -= уронмонстра
print(f"Монстр наносит тебе {урон_монстра} урона!")
print(f"Твоё здоровье: {здоровьеигрока} | Здоровье монстра: {здоровьемонстра}\n")
if здоровье_игрока <= 0:
поражение()
else:
победа()
— Здесь мы используем случайные числа random.randint, чтобы определять силу удара и шанс на побег, — объяснил Профессор. — Это делает каждое новое прохождение истории уникальным и непредсказуемым.
— А ещё можно добавить скрытые счётчики, — подхватил Байт. — Например, уровень "дружелюбности" других персонажей к игроку. Если ты всем хамишь, они перестанут тебе помогать!
— Или очки опыта, чтобы повышать уровни, как в настоящих RPG-играх! — добавила Алиса.
— Потрясающие идеи! — похвалил Профессор, допивая свой чай. — Такие механики делают игру по-настоящему глубокой, и в неё хочется играть снова и снова. Ну что ж, инструменты у тебя есть. Давай придумывать сюжет для твоей первой собственной игры!