Added critical hit system: the player and rabbit entities have a chance of making x4 damage! Closes #52
This commit is contained in:
parent
c01307202a
commit
9b8dfb00da
|
@ -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:
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue