Создаём текстовую игру-приключение
Превращаем слова в миры: комнаты, инвентарь и выбор, который важен
input, if / elif / else, циклы, списки, словари и функции -- чтобы построить одну небольшую законченную игру.
- хранить карту комнат в словаре,
- показывать комнату и читать ход игрока через
input, - переходить из комнаты в комнату с помощью
if/elif/else, - вести инвентарь в списке,
- запускать игру циклом
whileи завершать её условиями победы / поражения, - наводить порядок в коде с помощью маленьких функций.
1. Что такое текстовое приключение?
Представь книгу-игру, где ты сам выбираешь путь. Ты читаешь страницу, а там написано: «чтобы открыть дверь, перейди на страницу 12; чтобы убежать, перейди на страницу 30». Ты решаешь, что будет дальше. Текстовая игра-приключение устроена так же, только страницы хранит и листает компьютер.
У каждого текстового приключения есть три простые части:
- Комнаты -- места, где ты можешь находиться, у каждого есть описание и набор выходов.
- Игрок -- где ты сейчас и что несёшь с собой.
- Цикл -- показать комнату, спросить ход, отреагировать и повторять, пока не победишь или не проиграешь.
Мы построим это по кусочкам. Хорошая новость: ты уже знаешь каждый нужный инструмент. Мы просто соединяем их вместе.
2. Карта: комнаты в словаре
Словарь хранит вещи по имени. Это идеально для карты: у каждой комнаты есть имя, описание и список выходов. Мы можем даже вложить маленький словарь выходов внутрь каждой комнаты.
rooms = {
"Hall": {
"desc": "You are in a bright entrance hall.",
"exits": {"north": "Kitchen", "east": "Library"}
},
"Kitchen": {
"desc": "A warm kitchen. Something smells nice.",
"exits": {"south": "Hall"}
},
"Library": {
"desc": "Tall shelves full of dusty books.",
"exits": {"west": "Hall"}
}
}
Читай это как оглавление. rooms["Hall"] даёт сведения о зале. rooms["Hall"]["exits"] даёт только его выходы: {"north": "Kitchen", "east": "Library"}. Значит, стоя в зале и идя на север, ты попадаешь на кухню.
rooms[0]), и в них легко запутаться. Со словарём ты ищешь их по настоящему имени (rooms["Kitchen"]), и это читается как обычный текст.