예제 #1
0
파일: Hero.py 프로젝트: 6a6ka/PythonRPG
    def __init__(self):

        self.heroRace = Race()
        self.heroClass = ""

        #Получаем Данные от пользователя
        self.getName()
        self.getClass()
        self.getRace()

        super().__init__(self.name, self.heroRace.stats, Elements(), 0)

        ## Инвентарь героя
        self.inventory = Inventory()
        ## Обмундирование героя
        self.equipment = Equipment()
        ## Карман с Лечебками героя
        self.potionsPocket = PotionsPocket()
예제 #2
0
파일: Hero.py 프로젝트: 6a6ka/PythonRPG
	def __init__(self):

		self.heroRace = Race()
		self.heroClass = ""

		#Получаем Данные от пользователя
		self.getName()
		self.getClass()
		self.getRace()

		super().__init__(self.name,self.heroRace.stats,Elements(),0)

		## Инвентарь героя
		self.inventory = Inventory()
		## Обмундирование героя
		self.equipment = Equipment()
		## Карман с Лечебками героя
		self.potionsPocket = PotionsPocket()
예제 #3
0
파일: Hero.py 프로젝트: 6a6ka/PythonRPG
class Hero(Entity):

	def __init__(self):

		self.heroRace = Race()
		self.heroClass = ""

		#Получаем Данные от пользователя
		self.getName()
		self.getClass()
		self.getRace()

		super().__init__(self.name,self.heroRace.stats,Elements(),0)

		## Инвентарь героя
		self.inventory = Inventory()
		## Обмундирование героя
		self.equipment = Equipment()
		## Карман с Лечебками героя
		self.potionsPocket = PotionsPocket()

	## Получает имя Персонажа
	def getName(self): #TODO! Не получать пустую строку , и чтобы ввод был норм.
		while True:
			self.name = input("Input you name:")
			if self.name:
				# Если что-то было введено - прекратить цикл
				break
	## Получает Рассу
	def getRace(self):
		#Получаем Расу
		self.heroRace = utils.getChoice("Choose your Race:",races) #TODOlater Сделать вывод по горизонтали

	## Получает Класс
	def getClass(self): #TODO Сдлеать сразу содание класса, при выборе одного из классов(вызывается создание класса) http://stackoverflow.com/questions/8141165/how-to-dynamically-select-a-method-call-in-python
		self.heroClass = utils.getChoice("Choose Your Class:",[
			"Warrior",
			"Ranger",
			"Mage"
		])


		## Выводит полный перечень Того что есть у Персонажа:
	## Уровень Опыт Класс Рассу
	## Статистики (stats, hp, mp, money)
	## Урон
	## Вещи в inventory (инвентаре)
	## Вещи в equipment (обмундировании)
	## Лечебки в potionsPocket
	## Резисты Персонажа
	## Квесты в QuestJournal
	## Заклинания в SpellBook

	def showStats(self):
	#TODO showStats() в hero делать с переносом на новую строку при выводе каждого объекта. При этом с использованием \n и дальше на новой строке код
	#        -Level exp
	#		 +Race Class
	# 		 +Stats
	#        +Damage
	#        +inventory
	#        +equipment
	#        +potionsPocket
	#        +resists
	#        -questJournal
	#        -spellbook
	#
		pass

	## восстанавливает hp и mp
	def heal(self):
		self.stats.hp = self.stats.maxHp
		self.stats.mp = self.stats.maxMp

	## Кастует Заклинание
	def castSpell(self, spell): #TODOlater Сделать когда будет готов класс Spell и SpellBook
		pass

		#TODO Переименовать на action? или еще что-то
	def castSpellChoice(self, hero, enemies):
		pass

	def usePotionChoice(self, hero, enemies):
		choosedPotion = utils.getChoice("What potion to use?", self.potionsPocket.items(), cancel=True)
		if choosedPotion:
			# Если было выбрано одно из зелий
			self.use(choosedPotion)
		else:
			#TODO! Выбрали отмену
			return False

		#вызывает simpleAttack для выбранного монстра
	def attackChoice(self, hero, enemies):
		if len(enemies) > 1:
			choosedEnemy = utils.getChoice("Choose your target:", enemies, cancel=True)
			if choosedEnemy == 0:
				#TODO! Выбрана отмена
				return False
		else:
		# Если один противник - его бьёт автоматически
			choosedEnemy = enemies[0]
		self.simpleAttack(choosedEnemy)

	def doTurn(self, hero, enemies):
		availableBattleChoices = self.getAvailableBattleChoices()
		selectedBattleChoice = utils.getChoice("What would you do?", list(availableBattleChoices.keys()))
		availableBattleChoices[selectedBattleChoice](hero, enemies)


		## Возвращает Словарь с возможными вариантами хода и методом за них отвечающим
	def getAvailableBattleChoices(self):
		battleChoices = {}
		# Simple attack is always available
		battleChoices["Attack with \"{0}\"".format(self.equipment.weapon())] = self.attackChoice
		#if not self.spellBook.isEmpty():
		#   battleChoices["Cast Spell"] = self.castSpellChoice
		if not self.potionsPocket.isEmpty():
			battleChoices["Use Potion"] = self.usePotionChoice
		return battleChoices

		## Одевает item в equipment и убирает из inventory
	def equip(self, item):
		if self.equipment.equipment[item.piece] != "empty":#if there is an item
			self.unequip(self.equipment.equipment[item.piece])
		#now the slot is empty
		self.equipment.equipment[item.piece]=item
		#Если вещь в инвентаре - убрать её оттуда
		self.inventory.removeItem(item)
		#give items Stats bonus and damage/defence
		self.stats.addStats(item.bonusStats)
		if item.isWeapon():
			self.stats.damage.addDamage(item.damage)
		if item.isArmor():
			self.defence+=item.defence

	#Think Нужен ли equipList() - который будет просто вызывать equip для каждой вещи

	## Снимает item из equipment и кладёт в inventory
	def unequip(self, item):
		#remove Stats that this item added
		self.stats.removeStats(self.equipment.equipment[item.piece].bonusStats)
		if item.isWeapon():
			self.stats.damage.removeDamage(item.damage)
		if item.isArmor():
			self.defence-=item.defence
			#add it to inventory
		self.inventory.addItem(self.equipment.equipment[item.piece])
		#make this slot empty
		self.equipment.equipment[item.piece] = "empty"


	## Использует вещь на героя (например Зелье)
	def use(self, item):
		item.use(self)

	## Возвращает true Если герой может использовать это (Spell, weapon, armor и т.п.)
	def canUse(self, object):
		return object.canUse(hero)

	def __str__(self):
		#return '"{0}" Health: {1}/{2} Mana: {3}/{4} {5} Defence: {6}'.format(self.name,self.hp,self.maxHp,self.mp,self.maxMp,self.stats.damage,self.defence)
		return '"{0}"  Health: {1.hp}/{1.maxHp}  Mana: {1.mp}/{1.maxMp}  {1.damage}  Defence: {2}'.format(self.name, self.stats, self.defence)
예제 #4
0
파일: Hero.py 프로젝트: 6a6ka/PythonRPG
class Hero(Entity):
    def __init__(self):

        self.heroRace = Race()
        self.heroClass = ""

        #Получаем Данные от пользователя
        self.getName()
        self.getClass()
        self.getRace()

        super().__init__(self.name, self.heroRace.stats, Elements(), 0)

        ## Инвентарь героя
        self.inventory = Inventory()
        ## Обмундирование героя
        self.equipment = Equipment()
        ## Карман с Лечебками героя
        self.potionsPocket = PotionsPocket()

    ## Получает имя Персонажа
    def getName(
            self):  #TODO! Не получать пустую строку , и чтобы ввод был норм.
        while True:
            self.name = input("Input you name:")
            if self.name:
                # Если что-то было введено - прекратить цикл
                break

    ## Получает Рассу
    def getRace(self):
        #Получаем Расу
        self.heroRace = utils.getChoice(
            "Choose your Race:",
            races)  #TODOlater Сделать вывод по горизонтали

    ## Получает Класс
    def getClass(
        self
    ):  #TODO Сдлеать сразу содание класса, при выборе одного из классов(вызывается создание класса) http://stackoverflow.com/questions/8141165/how-to-dynamically-select-a-method-call-in-python
        self.heroClass = utils.getChoice("Choose Your Class:",
                                         ["Warrior", "Ranger", "Mage"])

        ## Выводит полный перечень Того что есть у Персонажа:

    ## Уровень Опыт Класс Рассу
    ## Статистики (stats, hp, mp, money)
    ## Урон
    ## Вещи в inventory (инвентаре)
    ## Вещи в equipment (обмундировании)
    ## Лечебки в potionsPocket
    ## Резисты Персонажа
    ## Квесты в QuestJournal
    ## Заклинания в SpellBook

    def showStats(self):
        #TODO showStats() в hero делать с переносом на новую строку при выводе каждого объекта. При этом с использованием \n и дальше на новой строке код
        #        -Level exp
        #		 +Race Class
        # 		 +Stats
        #        +Damage
        #        +inventory
        #        +equipment
        #        +potionsPocket
        #        +resists
        #        -questJournal
        #        -spellbook
        #
        pass

    ## восстанавливает hp и mp
    def heal(self):
        self.stats.hp = self.stats.maxHp
        self.stats.mp = self.stats.maxMp

    ## Кастует Заклинание
    def castSpell(
            self, spell
    ):  #TODOlater Сделать когда будет готов класс Spell и SpellBook
        pass

        #TODO Переименовать на action? или еще что-то
    def castSpellChoice(self, hero, enemies):
        pass

    def usePotionChoice(self, hero, enemies):
        choosedPotion = utils.getChoice("What potion to use?",
                                        self.potionsPocket.items(),
                                        cancel=True)
        if choosedPotion:
            # Если было выбрано одно из зелий
            self.use(choosedPotion)
        else:
            #TODO! Выбрали отмену
            return False

        #вызывает simpleAttack для выбранного монстра
    def attackChoice(self, hero, enemies):
        if len(enemies) > 1:
            choosedEnemy = utils.getChoice("Choose your target:",
                                           enemies,
                                           cancel=True)
            if choosedEnemy == 0:
                #TODO! Выбрана отмена
                return False
        else:
            # Если один противник - его бьёт автоматически
            choosedEnemy = enemies[0]
        self.simpleAttack(choosedEnemy)

    def doTurn(self, hero, enemies):
        availableBattleChoices = self.getAvailableBattleChoices()
        selectedBattleChoice = utils.getChoice(
            "What would you do?", list(availableBattleChoices.keys()))
        availableBattleChoices[selectedBattleChoice](hero, enemies)

        ## Возвращает Словарь с возможными вариантами хода и методом за них отвечающим
    def getAvailableBattleChoices(self):
        battleChoices = {}
        # Simple attack is always available
        battleChoices["Attack with \"{0}\"".format(
            self.equipment.weapon())] = self.attackChoice
        #if not self.spellBook.isEmpty():
        #   battleChoices["Cast Spell"] = self.castSpellChoice
        if not self.potionsPocket.isEmpty():
            battleChoices["Use Potion"] = self.usePotionChoice
        return battleChoices

        ## Одевает item в equipment и убирает из inventory
    def equip(self, item):
        if self.equipment.equipment[
                item.piece] != "empty":  #if there is an item
            self.unequip(self.equipment.equipment[item.piece])
        #now the slot is empty
        self.equipment.equipment[item.piece] = item
        #Если вещь в инвентаре - убрать её оттуда
        self.inventory.removeItem(item)
        #give items Stats bonus and damage/defence
        self.stats.addStats(item.bonusStats)
        if item.isWeapon():
            self.stats.damage.addDamage(item.damage)
        if item.isArmor():
            self.defence += item.defence

    #Think Нужен ли equipList() - который будет просто вызывать equip для каждой вещи

    ## Снимает item из equipment и кладёт в inventory
    def unequip(self, item):
        #remove Stats that this item added
        self.stats.removeStats(self.equipment.equipment[item.piece].bonusStats)
        if item.isWeapon():
            self.stats.damage.removeDamage(item.damage)
        if item.isArmor():
            self.defence -= item.defence
            #add it to inventory
        self.inventory.addItem(self.equipment.equipment[item.piece])
        #make this slot empty
        self.equipment.equipment[item.piece] = "empty"

    ## Использует вещь на героя (например Зелье)
    def use(self, item):
        item.use(self)

    ## Возвращает true Если герой может использовать это (Spell, weapon, armor и т.п.)
    def canUse(self, object):
        return object.canUse(hero)

    def __str__(self):
        #return '"{0}" Health: {1}/{2} Mana: {3}/{4} {5} Defence: {6}'.format(self.name,self.hp,self.maxHp,self.mp,self.maxMp,self.stats.damage,self.defence)
        return '"{0}"  Health: {1.hp}/{1.maxHp}  Mana: {1.mp}/{1.maxMp}  {1.damage}  Defence: {2}'.format(
            self.name, self.stats, self.defence)