Added critical hit system: the player and rabbit entities have a chance of making x4 damage! Closes #52
This commit is contained in:
		@@ -87,9 +87,9 @@ class Rabbit(Monster):
 | 
				
			|||||||
    A rabbit monster
 | 
					    A rabbit monster
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    def __init__(self, name: str = "rabbit", strength: int = 1,
 | 
					    def __init__(self, name: str = "rabbit", strength: int = 1,
 | 
				
			||||||
                 maxhealth: int = 15, *args, **kwargs) -> None:
 | 
					                 maxhealth: int = 15, critical: int = 30, *args, **kwargs) -> None:
 | 
				
			||||||
        super().__init__(name=name, strength=strength,
 | 
					        super().__init__(name=name, strength=strength,
 | 
				
			||||||
                         maxhealth=maxhealth, *args, **kwargs)
 | 
					                         maxhealth=maxhealth, critical=critical, *args, **kwargs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TeddyBear(Monster):
 | 
					class TeddyBear(Monster):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,12 +25,12 @@ class Player(InventoryHolder, FightingEntity):
 | 
				
			|||||||
                 dexterity: int = 1, constitution: int = 1, level: int = 1,
 | 
					                 dexterity: int = 1, constitution: int = 1, level: int = 1,
 | 
				
			||||||
                 current_xp: int = 0, max_xp: int = 10, inventory: list = None,
 | 
					                 current_xp: int = 0, max_xp: int = 10, inventory: list = None,
 | 
				
			||||||
                 hazel: int = 42, equipped_item: Optional[Item] = None,
 | 
					                 hazel: int = 42, equipped_item: Optional[Item] = None,
 | 
				
			||||||
                 equipped_armor: Optional[Item] = None, *args, **kwargs) \
 | 
					                 equipped_armor: Optional[Item] = None, critical: int = 5,\
 | 
				
			||||||
            -> None:
 | 
					                 *args, **kwargs) -> None:
 | 
				
			||||||
        super().__init__(name=name, maxhealth=maxhealth, strength=strength,
 | 
					        super().__init__(name=name, maxhealth=maxhealth, strength=strength,
 | 
				
			||||||
                         intelligence=intelligence, charisma=charisma,
 | 
					                         intelligence=intelligence, charisma=charisma,
 | 
				
			||||||
                         dexterity=dexterity, constitution=constitution,
 | 
					                         dexterity=dexterity, constitution=constitution,
 | 
				
			||||||
                         level=level, *args, **kwargs)
 | 
					                         level=level, critical=critical, *args, **kwargs)
 | 
				
			||||||
        self.current_xp = current_xp
 | 
					        self.current_xp = current_xp
 | 
				
			||||||
        self.max_xp = max_xp
 | 
					        self.max_xp = max_xp
 | 
				
			||||||
        self.inventory = self.translate_inventory(inventory or [])
 | 
					        self.inventory = self.translate_inventory(inventory or [])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -403,11 +403,12 @@ class FightingEntity(Entity):
 | 
				
			|||||||
    dexterity: int
 | 
					    dexterity: int
 | 
				
			||||||
    constitution: int
 | 
					    constitution: int
 | 
				
			||||||
    level: int
 | 
					    level: int
 | 
				
			||||||
 | 
					    critical: int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, maxhealth: int = 0, health: Optional[int] = None,
 | 
					    def __init__(self, maxhealth: int = 0, health: Optional[int] = None,
 | 
				
			||||||
                 strength: int = 0, intelligence: int = 0, charisma: int = 0,
 | 
					                 strength: int = 0, intelligence: int = 0, charisma: int = 0,
 | 
				
			||||||
                 dexterity: int = 0, constitution: int = 0, level: int = 0,
 | 
					                 dexterity: int = 0, constitution: int = 0, level: int = 0,
 | 
				
			||||||
                 *args, **kwargs) -> None:
 | 
					                 critical: int = 0, *args, **kwargs) -> None:
 | 
				
			||||||
        super().__init__(*args, **kwargs)
 | 
					        super().__init__(*args, **kwargs)
 | 
				
			||||||
        self.maxhealth = maxhealth
 | 
					        self.maxhealth = maxhealth
 | 
				
			||||||
        self.health = maxhealth if health is None else health
 | 
					        self.health = maxhealth if health is None else health
 | 
				
			||||||
@@ -417,6 +418,7 @@ class FightingEntity(Entity):
 | 
				
			|||||||
        self.dexterity = dexterity
 | 
					        self.dexterity = dexterity
 | 
				
			||||||
        self.constitution = constitution
 | 
					        self.constitution = constitution
 | 
				
			||||||
        self.level = level
 | 
					        self.level = level
 | 
				
			||||||
 | 
					        self.critical = critical
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def dead(self) -> bool:
 | 
					    def dead(self) -> bool:
 | 
				
			||||||
@@ -426,10 +428,16 @@ class FightingEntity(Entity):
 | 
				
			|||||||
        """
 | 
					        """
 | 
				
			||||||
        Deals damage to the opponent, based on the stats
 | 
					        Deals damage to the opponent, based on the stats
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
 | 
					        diceroll = randint(0, 100)
 | 
				
			||||||
 | 
					        damage = self.strength
 | 
				
			||||||
 | 
					        string = " "
 | 
				
			||||||
 | 
					        if diceroll <= self.critical: # It is a critical hit
 | 
				
			||||||
 | 
					            damage *= 4
 | 
				
			||||||
 | 
					            string = _(" It's a critical hit! ")
 | 
				
			||||||
        return _("{name} hits {opponent}.")\
 | 
					        return _("{name} hits {opponent}.")\
 | 
				
			||||||
            .format(name=_(self.translated_name.capitalize()),
 | 
					            .format(name=_(self.translated_name.capitalize()),
 | 
				
			||||||
                    opponent=_(opponent.translated_name)) + " " + \
 | 
					                    opponent=_(opponent.translated_name)) + string + \
 | 
				
			||||||
            opponent.take_damage(self, self.strength)
 | 
					            opponent.take_damage(self, damage)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def take_damage(self, attacker: "Entity", amount: int) -> str:
 | 
					    def take_damage(self, attacker: "Entity", amount: int) -> str:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user