Мини текстовая игра на Python (RPG)

от автора

Ходил бродил по просторам интернета и случайно наткнулся на статью о создании мини rpg игры текстового типа на python. И так как я очень люблю всяческие Hello world-ы, то не смог пройти мимо.

Ознакомившись со статьёй и комментариями к ней я решил тряхнуть стариной и повторить опыт автора в написании простенькой игры, конечно же модернизировав код и проверив его работоспособность.

Получилось у меня что-то типа этого:

https://gist.github.com/basimka/2a54ae0b256ecf057e2ebc839c718a66

Конечно же этого было мало и я начал писать дальше. В результате

  • Теперь у меня есть несколько комнат

  • По комнатам можно передвигаться

  • Можно взаимодействовать с предметами (поднимать, надевать)

  • Можно нападать на монстров и драться с ними

  • В планах прикрутить взлом замков… и прочие плюшки

Ссылка на Git проекта

Но статья моя будет конечно же сосредоточена на том что бы описать весь тот ужос который я напрограммировал и подтолкнуло меня к этому два факта:

  • Факт 1. В интернете не так много уроков или примеров текстовых игр на python. В основном всё концентрируется на игровом движке, картинках и конечном результате. В текстовой игре ты заморачиваешься над логикой игры, над механиками. Ни что не стоит потратить пару часов и накидать на python прототип какой либо игры. Ну а что может помешать потом прикрутить графику?…

  • Факт 2. Это статья как раз сможет показать мне интерес к данной теме. У одного меня и пары моих друзей(всего у одного) так горят руки сделать что нибудь этакое не прибегая к дизайну и художеству, а реализуя логику игры с помощью текста, спецсимволов, ну и естественно.

Собственно Игра

Начинается всё с того что мы добавляем в игру библиотеку randomizer и будущую библиотеку с картинками:

                                    # Для начала импортируем рандомайзер from random import randint  # Добавляем библиотеку с картинками from pictures import pic_Start

Создаём в этой же директории файл с именем pictures.py и создаём в нем функцию с нашим лого:

def pic_Start():     print(''' ############################################################################################ ############################################################################################ #   ##    ##   ######   ##    ##        ##    ##  ########  ########  ##        ######     # #   ###  ###   ##  ##    ##  ##         ## ## ##  ##    ##  ##    ##  ##        ##    ##   # #   ## ## ##  ########   ##  ##         ###  ###  ##    ##  ######    ##        ##    ##   # #   ##    ##  ##    ##  ##    ##        ##    ##  ########  ##    ##  ########  ######     # ############################################################################################ ############################################################################################            '''     )

Теперь если мы где-то вызовем pic_Start() то вызовем печать нашего лого.

Вернёмся к нашему основному файлу. Реализация состояния «в битве» не «в битве» я решил реализовать с помощью глобальной переменной agressive, если agressive > 0 значит на вас кто-то напал, если нет то всё ОК :

#Объявление глобальной переменной агрессия #Если агрессия есть то значит и по шапке получить можно global agressive agressive = 0

Далее мы выводим наш logo и описываем Class Player

###Приветственный экран pic_Start() # Это класс Персонажа, так как версия игры сейчас однопользовательская # то экземпляр класса Игрока только один class Player:     inventar = []     inventar_str = []     def __init__(self, hp, damage, mana, haco):         self.hp = hp         self.damage = damage         self.mana = mana         self.haco = haco     lvl = 1        exp = 0     if exp >= 256000:         lvl = 10     elif exp >= 128000:         lvl = 9     elif exp >= 64000:         lvl = 8     elif exp >= 32000:         lvl = 7     elif exp >= 16000:         lvl = 6     elif exp >= 8000:         lvl = 5     elif exp >= 4000:         lvl = 4     elif exp >= 2000:         lvl = 3     elif exp >= 1000:         lvl = 2     def __str__(self):         pass  #Так как экземпляр класса Игрока у нас должен быть доступен отовсюду, # то для начала мы делаем его глобальным, а потом уже создаем сам # экземпляр класса global p  p = Player(100,10,0,20)

Class Player создаёт класс у которого есть inventar = [] — сюда помещаются всяческие мечи доспехи, которые игрок надел. И так как мне не удалось нормально выводить названия этих предметов то их названия хранятся в отдельном списке inventar_str = []. Через def _init_ задаём разные параметры персонажа, а с помощью p = Player(100,10,0,20), создаём экземпляр класс Player с параметрами hp = 100, damage = 10, mana = 0, haco = 20.

Класс противника делаем по тому же образу и подобию

#Экземпляр класса противника, во многом схож с игроком, но экземпляров класса будет куча class Enemy:     def __init__(self,name,hp,damage,mana,haco,exp):         self.hp = hp         self.damage = damage         self.mana = mana         self.name = name         self.haco = haco         self.exp = exp     def __str__(self):         return str(self.name)  e = Enemy('мышь',80,10,0,20,10) Rabbit = Enemy('кролик',100,15,0,20,20)

Так же реализуем класс оружия:

############################## Оружие ########################### class Weapon:     def __init__(self,name,damage,stability):         self.name = name         self.damage = damage         self.stability = stability      def __str__(self):         return str(self.name)  woodstick = Weapon('Палка',10,5) clows = Weapon('Когти',20,20) knife = Weapon('Нож',20,10) sword = Weapon('Меч',25,15) staff = Weapon('Посох',15,15)

Ну а дальше становится всё интереснее и интереснее, так как в любой RPG необходимо передвигаться по пещерам и полям, то мы вводим в игру такое понятие как комната(Room) и собственно описываем класс комната:

####################### Комнаты ################################## class Room:     name = 'Комната'     vihody = ['ю','з']     orujie = sword     vragy = e     opisanie =('\n' + '\ ###################\n' + f'\ Вы попали в {name}\n'+'\ ###################\n'+'\ Выходы есть только:\n'+ f'\ {vihody}\n')  r0 = Room()

У комнаты есть название — name. В комнате могут быть выходы — vihody, оружие может валяться на полу — orujie и собственно в комнате могут находится враги — vragy.

Описание комнаты у нас выполнен с применением спецсимволов \n — переход на другую строчку f — позволяет использовать в тексте ссылки на переменные {name} и \ — перенос кода на новую строчку. В конце мы конечно же вызываем экземпляр класса.

Инвентарь мы тоже реализовали с помощью класса, в принципе здесь нет ни чего интересного разве что кроме things = [] и str_things = []. Как и в прошлом примере в things мы помещаем класс предмета а в str_things его название.

# Инвентарь. Было принято решение вынести инвентарь в отдельный класс. class inventar():     golds = 0     things = []     str_things = []     potions = []     scrolls = []     limit = 10  inv = inventar() 

Играя в игру мы будем вызывать разного рода информативные меню (посмотреть, инвентарь, помощь и т.д.). Эти меню должны отображать информацию о вещах и параметрах за которые отвечают:

######################### Меню Посмотреть########################### def do_look():     print(maplocation.opisanie)     if maplocation.orujie != 0:         print (f'Валяется {maplocation.orujie}')     if maplocation.vragy != 0:         print (f'В углу скалится {maplocation.vragy}')  ######################### меню Инвентарь ########################### def menu_inventory():     print ('Ваше золото = ' , inv.golds)     print ('Ваши вещи = ' , inv.str_things)     print ('Ваши свитки = ' , inv.scrolls)     print ('Ваши бутылочки = ' , inv.potions)     print ('Свобдных слотов =' , inv.limit)     input("Нажмите Enter для продолжения.")  ########################## Меню статистика ######################### def menu_stats():     print('Статистика игрок')     print('****************')     print (f'hp = {p.hp}')     print (f'damage = {p.damage}')     print (f'mana = {p.mana}')     print (f'exp = {p.exp}')     print (f'На вас надеты = {p.inventar_str}')     input("Нажмите Enter для продолжения.")  ########################## Меню Битва ######################### ### Пока не задействовано def menu_prefight():     print (f''' (1) Сражаться (2) Посмотреть статистику            (3) Вызвать меню помощи (4) Выход из игры ''')      ########################## Основное меню ######################### def start_menu():     print (f''' Введите и нажмите  Enter см (смотреть) - Осмотреться хр (характеристики) - Характеристики инв (инвентарь) - Инвентарь            ? (Помощь) - Вызвать меню помощи выход (прочь) - Выход из игры взять - Поднять или взять что есть в комнате надеть - Надеть что-то из инвентаря напасть - Напасть на кого нибудь ''')      ############################ Меню Помощи ######################### def menu_help():     print('####################################')     print('Помочь ты сможешь только себе сам!!!')     print('####################################') 

Вызывая ту или иную функцию мы будем видеть необходимую информацию, например если мы вызовем:

start_menu()

то мы увидим:

Из неизвестного у нас здесь появляется переменная maplocation

Далее станет известно что в зависимости от комнаты в которой мы находимся maplocation принимает значение этой комнаты, например:

maplocation = r0

И если мы сменим комнату то и значение maplocation тоже поменяется.

И так, продолжим. Далее у нас следует гигантский блок под названием «Действие»

############## Основная функция действия ######################### def deystvie(n):       global x     global maplocation     if n == 'см':         do_look()     elif n == 'смотреть':         do_look()     elif n == 'хр':         menu_stats()     elif n == 'характеристики':         menu_stats()     elif n == 'инв':         menu_inventory()     elif n == 'инвентарь':         menu_inventory()     elif n == '?':         start_menu()     elif n == 'помощь':         start_menu()     elif n == 'выход':         quit()     elif n == 'прочь':         quit()     elif n == 'надеть':         print ('Что вы хотите надеть?')         print (inv.str_things)         fg = input('Введите название предмета: ')         i = 0         while i < len(inv.things):             if str(fg) == str(inv.things[i]):                 print (f'Вы надели {inv.things[i]}')                 p.inventar.append(inv.things[i])                  p.inventar_str.append(str(inv.things[i]))                 p.damage = p.damage + inv.things[i].damage                 del inv.things[i]                 del inv.str_things[i]             i+=1      elif n == 'напасть':         if maplocation.vragy != 0:             print ('На кого вы хотите напасть? \n')             print (maplocation.vragy)             fg = input('Введите название врага: ')             if str(fg) == str(maplocation.vragy):                 print (f'Вы напали на {maplocation.vragy}')                 global agressive                 agressive = agressive + 1                                fight()      elif n == 'ю':         if maplocation.name == 'Комната':             print('\n Вы перешли на юг')             maplocation = r3         elif maplocation.name == 'Комната1':             print('\n Тут стена, идти не куда')         elif maplocation.name == 'Комната3':             print('\n Тут стена, идти не куда')     elif n == 'з':         if maplocation.name == 'Комната':             print('\n Вы перешли на запад')             maplocation = r1         elif maplocation.name == 'Комната1':             print('\n Тут стена, идти не куда')         elif maplocation.name == 'Комната3':             print('\n Тут стена, идти не куда')     elif n == 'в':         if maplocation.name == 'Комната':             print('\n Тут стена, идти не куда')         elif maplocation.name == 'Комната1':             print('\n Вы перешли на восток')             maplocation = r0         elif maplocation.name == 'Комната3':             print('\n Тут стена, идти не куда')                  elif n == 'с':         if maplocation.name == 'Комната':             print('\n Тут стена, идти не куда')         elif maplocation.name == 'Комната1':             print('\n Тут стена, идти не куда')         elif maplocation.name == 'Комната3':             print('\n Вы перешли на север')             maplocation = r0     elif n == 'взять':         if maplocation.orujie != 0:             print ('\n Что вы хотите взять? \n')             print (maplocation.orujie)             vz = input('Введите название предмета: ')             if str(vz) == str(maplocation.orujie):                 print (f'Вы взяли {maplocation.orujie}')                 inv.things.append(maplocation.orujie)                 inv.str_things.append(str(maplocation.orujie))                 maplocation.orujie = 0     else:         print ('Ни чего не произошло')

В функцию действие мы передаём значение n, ну а n у нас равно тому что пользователь введёт в строчку ввода. Если мы введём «см» или «смотреть» то запустим функцию do_look(), если введём хр или характеристики то запустим функцию menu_stats(). Если же ввод не будет удовлетворять ни одному условию то else нам выдаст «Ни чего не произошло».

Из наиболее интересных вещей у нас здесь есть «надеть», «напасть»,»взять». Попробуйте самостоятельно разобраться как они работают.

def fight():     global agressive     while agressive != 0:         print('Вы hp:',p.hp)         print('Вы damage: ',p.damage)         print("**********************")         print('Враг hp:',e.hp)         print('Враг damage: ',e.damage)         print("**********************")         print("**********************")         print("1)Ударить")         print("2)Хил 0-5")         n = input("Введите число: ")         if n == '1':             # Здоровье врага отнимает от вашего дамага.             e.hp -= p.damage             print('Вы ударили противника, у него осталось', e.hp)             # Здоровье игрока отнимает от дамага врага.             p.hp -= e.damage             print('Противник ударил вас, у вас осталось',p.hp)             print("*********************")             if p.hp < 0:                 print("Вы проиграли")                 agressive = agressive - 1                 quit()             elif e.hp < 0:                 print("Вы победили")                 agressive = agressive - 1                 p.exp = p.exp + maplocation.vragy.exp                 maplocation.vragy = 0          elif n == '2':             # Рандомно от 0 до 5 добавляет хп.             p.hp += randint(0,5)             # Если здоровье игрока больше, то хп игрока будет равна 100.             if p.hp > 100:                 p.hp = 100              #print('Ваши хп',p.hp)         else:              print("Чего ждем?")

И так, функция битвы, собственно для чего всё и задумывалось. Правда битва пока получилась не очень заурядная, при каждом раунде мы выбираем что делать, ударить или «отхилится», если выбираем ударить, то обмениваемся с врагом ударами, если у кого-то здоровье меньше ноля, то тот проиграл.

Остается дело за малым, выводим справку:

start_menu()

Объявляем и обнуляем агрессию, и запускаем основной цикл игры.

global maplocation maplocation = r0  global agressiv agressiv = False  ############################## Основной игровой цикл  ########################### while True:     # Предлагаем выбрать действие     n = input('Введите что нибудь: ')     # Обрабатываем выбранное действие     deystvie(n)     # Проверяем не напал ли на нас кто-то     # Пока не работает     proverka_enimy()

Весь код игры ниже:

# Для начала импортируем рандомайзер from random import randint  # Добавляем библиотеку с картинками from pictures import pic_Start  #Объявление глобальной переменной агрессия #Если агрессия есть то значит и по шапке получить можно global agressive agressive = 0  ###Приветственный экран pic_Start() # Это класс Персонажа, так как версия игры сейчас однопользовательская # то экземпляр класса Игрока только один class Player:     inventar = []     inventar_str = []     def __init__(self, hp, damage, mana, haco):         self.hp = hp         self.damage = damage         self.mana = mana         self.haco = haco     lvl = 1        exp = 0     if exp >= 256000:         lvl = 10     elif exp >= 128000:         lvl = 9     elif exp >= 64000:         lvl = 8     elif exp >= 32000:         lvl = 7     elif exp >= 16000:         lvl = 6     elif exp >= 8000:         lvl = 5     elif exp >= 4000:         lvl = 4     elif exp >= 2000:         lvl = 3     elif exp >= 1000:         lvl = 2     def __str__(self):         pass  #Так как экземпляр класса Игрока у нас должен быть доступен отовсюду, # то для начала мы делаем его глобальным, а потом уже создаем сам # экземпляр класса global p  p = Player(100,10,0,20)  #Экземпляр класса противника, во многом схож с игроком, но экземпляров класса будет куча class Enemy:     def __init__(self,name,hp,damage,mana,haco,exp):         self.hp = hp         self.damage = damage         self.mana = mana         self.name = name         self.haco = haco         self.exp = exp     def __str__(self):         return str(self.name)  e = Enemy('мышь',80,10,0,20,10) Rabbit = Enemy('кролик',100,15,0,20,20)  ############################## Оружие ########################### class Weapon:     def __init__(self,name,damage,stability):         self.name = name         self.damage = damage         self.stability = stability      def __str__(self):         return str(self.name)  woodstick = Weapon('Палка',10,5) clows = Weapon('Когти',20,20) knife = Weapon('Нож',20,10) sword = Weapon('Меч',25,15) staff = Weapon('Посох',15,15)  ####################### ЗамкИ ####################################    ####################### Комнаты ################################## class Room:     name = 'Комната'     vihody = ['ю','з']     orujie = sword     vragy = e     opisanie =('\n' + '\ ###################\n' + f'\ Вы попали в {name}\n'+'\ ###################\n'+'\ Выходы есть только:\n'+ f'\ {vihody}\n')      class Room1:     name = 'Комната1'     vihody = ['в']     orujie = knife     vragy = 0     opisanie =('\n' + '\ ###################\n' + f'\ Вы попали в {name}\n'+'\ ###################\n'+'\ Выходы есть только:\n'+f'\ {vihody}\n')  class Room2:     name = 'Комната2'     vihody = ['в','ю','']     orujie = sword     vragy = 0     opisanie =('###################\n' + f'\ Вы попали в {name}\n'+'\ ###################\n'+'\ Здесь ни чего нет\n'+'\ ###################\n'+'\ Выходы есть только:\n'+f'\ {vihody}\n')  class Room3:     name = 'Комната3'     vihody = ['с',]     orujie = staff     vragy = 0     opisanie =('\n' + '\ ###################\n' + f'\ Вы попали в {name}\n'+'\ ###################\n'+'\ Выходы есть только:\n'+f'\ {vihody}\n')  class Room4:     name = 'Комната4'     vihody = ['в','ю','с','з']     orujie = sword     vragy = []     opisanie =('###################\n' + f'\ Вы попали в {name}\n'+'\ ###################\n'+'\ Здесь ни чего нет\n'+'\ ###################\n'+'\ Выходы есть только:\n'+f'\ {vihody}\n')      class Room5:     name = 'Комната5'     vihody = ['в','ю']     orujie = sword     vragy = []     opisanie =('###################\n' + f'\ Вы попали в {name}\n'+'\ ###################\n'+'\ Здесь ни чего нет\n'+'\ ###################\n'+'\ Выходы есть только:\n'+f'\ {vihody}\n')      class Room6:     name = 'Комната6'     vihody = ['с','з']     orujie = sword     vragy = []     opisanie =('###################\n' + f'\ Вы попали в {name}\n'+'\ ###################\n'+'\ Здесь ни чего нет\n'+'\ ###################\n'+'\ Выходы есть только:\n'+f'\ {vihody}\n')      class Room7:     name = 'Комната7'     vihody = ['в','з','с']     orujie = sword     vragy = []     opisanie =('###################\n' + f'\ Вы попали в {name}\n'+'\ ###################\n'+'\ Здесь ни чего нет\n'+'\ ###################\n'+'\ Выходы есть только:\n'+f'\ {vihody}\n')      class Room8:     name = 'Комната8'     vihody = ['в','с']     orujie = sword     vragy = []     opisanie =('###################\n' + f'\ Вы попали в {name}\n'+'\ ###################\n'+'\ Здесь ни чего нет\n'+'\ ###################\n'+'\ Выходы есть только:\n'+f'\ {vihody}\n')  r0 = Room() r1 = Room1() r2 = Room2() r3 = Room3() r4 = Room4() r5 = Room5() r6 = Room6() r7 = Room7()  # Инвентарь. Было принято решение вынести инвентарь в отдельный класс. class inventar():     golds = 0     things = []     str_things = []     potions = []     scrolls = []     limit = 10  inv = inventar()      ######################### Меню Посмотреть########################### def do_look():     print(maplocation.opisanie)     if maplocation.orujie != 0:         print (f'Валяется {maplocation.orujie}')     if maplocation.vragy != 0:         print (f'В углу скалится {maplocation.vragy}')  ######################### меню Инвентарь ########################### def menu_inventory():     print ('Ваше золото = ' , inv.golds)     print ('Ваши вещи = ' , inv.str_things)     print ('Ваши свитки = ' , inv.scrolls)     print ('Ваши бутылочки = ' , inv.potions)     print ('Свобдных слотов =' , inv.limit)     input("Нажмите Enter для продолжения.")  ########################## Меню статистика ######################### def menu_stats():     print('Статистика игрок')     print('****************')     print (f'hp = {p.hp}')     print (f'damage = {p.damage}')     print (f'mana = {p.mana}')     print (f'exp = {p.exp}')     print (f'На вас надеты = {p.inventar_str}')     input("Нажмите Enter для продолжения.")  ########################## Меню Битва ######################### ### Пока не задействовано def menu_prefight():     print (f''' (1) Сражаться (2) Посмотреть статистику            (3) Вызвать меню помощи (4) Выход из игры ''')      ########################## Основное меню ######################### def start_menu():     print (f''' Введите и нажмите  Enter см (смотреть) - Осмотреться хр (характеристики) - Характеристики инв (инвентарь) - Инвентарь            ? (Помощь) - Вызвать меню помощи выход (прочь) - Выход из игры взять - Поднять или взять что есть в комнате надеть - Надеть что-то из инвентаря напасть - Напасть на кого нибудь ''')      ############################ Меню Помощи ######################### def menu_help():     print('####################################')     print('Помочь ты сможешь только себе сам!!!')     print('####################################')  ############## Основная функция действия ######################### def deystvie(n):       global x     global maplocation     if n == 'см':         do_look()     elif n == 'смотреть':         do_look()     elif n == 'хр':         menu_stats()     elif n == 'характеристики':         menu_stats()     elif n == 'инв':         menu_inventory()     elif n == 'инвентарь':         menu_inventory()     elif n == '?':         start_menu()     elif n == 'помощь':         start_menu()     elif n == 'выход':         quit()     elif n == 'прочь':         quit()     elif n == 'надеть':         print ('Что вы хотите надеть?')         print (inv.str_things)         fg = input('Введите название предмета: ')         i = 0         while i < len(inv.things):             if str(fg) == str(inv.things[i]):                 print (f'Вы надели {inv.things[i]}')                 p.inventar.append(inv.things[i])                  p.inventar_str.append(str(inv.things[i]))                 p.damage = p.damage + inv.things[i].damage                 del inv.things[i]                 del inv.str_things[i]             i+=1      elif n == 'напасть':         if maplocation.vragy != 0:             print ('На кого вы хотите напасть? \n')             print (maplocation.vragy)             fg = input('Введите название врага: ')             if str(fg) == str(maplocation.vragy):                 print (f'Вы напали на {maplocation.vragy}')                 global agressive                 agressive = agressive + 1                                fight()      elif n == 'ю':         if maplocation.name == 'Комната':             print('\n Вы перешли на юг')             maplocation = r3         elif maplocation.name == 'Комната1':             print('\n Тут стена, идти не куда')         elif maplocation.name == 'Комната3':             print('\n Тут стена, идти не куда')     elif n == 'з':         if maplocation.name == 'Комната':             print('\n Вы перешли на запад')             maplocation = r1         elif maplocation.name == 'Комната1':             print('\n Тут стена, идти не куда')         elif maplocation.name == 'Комната3':             print('\n Тут стена, идти не куда')     elif n == 'в':         if maplocation.name == 'Комната':             print('\n Тут стена, идти не куда')         elif maplocation.name == 'Комната1':             print('\n Вы перешли на восток')             maplocation = r0         elif maplocation.name == 'Комната3':             print('\n Тут стена, идти не куда')                  elif n == 'с':         if maplocation.name == 'Комната':             print('\n Тут стена, идти не куда')         elif maplocation.name == 'Комната1':             print('\n Тут стена, идти не куда')         elif maplocation.name == 'Комната3':             print('\n Вы перешли на север')             maplocation = r0     elif n == 'взять':         if maplocation.orujie != 0:             print ('\n Что вы хотите взять? \n')             print (maplocation.orujie)             vz = input('Введите название предмета: ')             if str(vz) == str(maplocation.orujie):                 print (f'Вы взяли {maplocation.orujie}')                 inv.things.append(maplocation.orujie)                 inv.str_things.append(str(maplocation.orujie))                 maplocation.orujie = 0     else:         print ('Ни чего не произошло')  def proverka_enimy():     pass  def fight():     global agressive     while agressive != 0:         print('Вы hp:',p.hp)         print('Вы damage: ',p.damage)         print("**********************")         print('Враг hp:',e.hp)         print('Враг damage: ',e.damage)         print("**********************")         print("**********************")         print("1)Ударить")         print("2)Хил 0-5")         n = input("Введите число: ")         if n == '1':             # Здоровье врага отнимает от вашего дамага.             e.hp -= p.damage             print('Вы ударили противника, у него осталось', e.hp)             # Здоровье игрока отнимает от дамага врага.             p.hp -= e.damage             print('Противник ударил вас, у вас осталось',p.hp)             print("*********************")             if p.hp < 0:                 print("Вы проиграли")                 agressive = agressive - 1                 quit()             elif e.hp < 0:                 print("Вы победили")                 agressive = agressive - 1                 p.exp = p.exp + maplocation.vragy.exp                 maplocation.vragy = 0          elif n == '2':             # Рандомно от 0 до 5 добавляет хп.             p.hp += randint(0,5)             # Если здоровье игрока больше, то хп игрока будет равна 100.             if p.hp > 100:                 p.hp = 100              #print('Ваши хп',p.hp)         else:              print("Чего ждем?")          ### Основноe меню start_menu()  ############################## Глобальные переменные ########################### #global x #x = 1 global maplocation maplocation = r0  global agressiv agressiv = False  ############################## Основной игровой цикл  ########################### while True:     # Предлагаем выбрать действие     n = input('Введите что нибудь: ')     # Обрабатываем выбранное действие     deystvie(n)     # Проверяем не напал ли на нас кто-то     # Пока не работает     proverka_enimy()

Игра постоянно дорабатывается и по ссылкам в Git будет обновляться. Надеюсь данная статься поможет кому нибудь воплотить свои задумки в жизнь.


ссылка на оригинал статьи https://habr.com/ru/articles/904624/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *