Напишите игру — текстовый квест.
Игрок находится в квартире, его задача — покинуть ее.
Игрок свободно перемещается по квартире, пока не покинет ее.
В квартире есть три комнаты (спальня, кухня, ванна) и коридор. В ванну можно попасть из коридора и спальни. В спальню можно попасть из ванны и коридора. На кухню можно попасть только из коридора. Коридор связан со всеми комнатами, но в нем дополнительно есть дверь наружу. На кухне открыто окно. Если игрок пытается выбраться через него, то разбивается и проигрывает
Пример:
Вы в спальне. Куда идем?
1 — в ванну
2 — в коридор
2
Вы в коридоре. Куда идем?
1 — в спальню
2 — в ванну
3 — на кухню
4 — в дверь
2
Вы в ванне. Куда идем?
1 — в коридор
2 — в спальню
2
Вы в спальне…
Решение:
# Вариант 1
def play_again():
print('Хотите попробовать ещё разок?')
while True:
play = int(input('1 - Да\n2 - Нет\n'))
if play == 1:
run_game()
break
#elif play == 2:
else:
print('Игра закончена. Приходите поиграть ещё.')
break
# Пришлось добавить обработку не цифр
def get_step(options):
choise = 0
while True:
while True:
try:
choise = int(input('Куда пойти? '))
break
except Exception:
print("Не верно указан маршрут. Попробуйте ещё раз.")
if choise in options:
break
return choise
def bedroom():
print('Вы в спалне. Перед вами 2 двери, куда идём:\n1 - в ванную\n2 - в каридор')
door = get_step([1, 2])
if door == 1:
bathroom()
#elif door == 2:
else:
coridors()
def kitchen():
print('Вы на кухне. Перед вами каридор и окно, куда идём:\n1 - в каридор\n2 - в окно')
door = get_step([1, 2])
if door == 1:
coridors()
#elif door == 2:
else:
print('Выход в окно был не обдумманым. Вы разбились.')
play_again()
def coridors():
print('Вы в коридоре. Куда идём?\n1 - в спальню\n2 - в ванну\n3 - на кухню\n4 - в дверь')
door = get_step([1, 2, 3, 4])
if door == 1:
bedroom()
elif door == 2:
bathroom()
elif door == 3:
kitchen()
elif door == 4:
print('Вы открываете дверь. Удивительно, она не заперта! Вы выиграли.')
play_again()
def bathroom():
print('Вы в ванне. Куда идём?\n1 — в коридор\n2 — в спальню')
door = get_step([1, 2])
if door == 1:
coridors()
#elif door == 2:
else:
bedroom()
def run_game():
print('Добро пожаловать в Квест.\nПеред вами 3 двери, куда идём:\n1 - в спальню\n2 - на кухню\n3 - в ванную')
door = get_step([1, 2, 3])
if door == 1:
bedroom()
elif door == 2:
kitchen()
else:
bathroom()
run_game()
И ещё одно решение:
# Вариант 2
level = {
0:('Вы в незнакомой квартире. И вам нужно выбраться', {'осмотреться':1}),
1:('Вы в спальне. Куда пойти?', {'в ванную':2, 'в коридор':4}),
2:('Вы в ванной. Куда пойти?', {'в спальню':1, 'в коридор':4}),
3:('Вы на кухне. Здесь есть окно. Куда пойти?', {'в окно':5, 'в коридор':4}),
4:('Вы в коридоре. Куда пойти?', {'в ванную':2, 'в спальню':1, 'на кухню':3, 'в дверь':6}),
5:('Вы разбиваете окно, выпрыгиваете в него и падаете. Причем долго - этаж был далеко не первый. Вы проиграли.', {'заново?':0}),
6:('Вы открываете дверь. Удивительно, она не заперта! Вы выиграли.', {'заново?':0})
}
def change(lvl):
play_again = True
a, b, c = level[lvl], {}, 1
print(a[0])
for i in a[1]:
print('%s - %s' % (c, i))
b[str(c)], c = a[1][i], c + 1
while 1:
d = input()
if d in b:
break
elif d == '0':
play_again = False
break
else:
print('Неправильно набран номер!')
if play_again:
change(b[d])
change(0)
