Задача 10 — Напишите игру — текстовый квест

Напишите игру — текстовый квест.
Игрок находится в квартире, его задача — покинуть ее.
Игрок свободно перемещается по квартире, пока не покинет ее.
В квартире есть три комнаты (спальня, кухня, ванна) и коридор. В ванну можно попасть из коридора и спальни. В спальню можно попасть из ванны и коридора. На кухню можно попасть только из коридора. Коридор связан со всеми комнатами, но в нем дополнительно есть дверь наружу. На кухне открыто окно. Если игрок пытается выбраться через него, то разбивается и проигрывает

Пример:
Вы в спальне. Куда идем?
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)


2320login-checkЗадача 10 — Напишите игру — текстовый квест

Добавить комментарий