import random as _random import uuid as _uuid class BrSimPlayer(): def __init__(self, name, inventory= None): self.id= str(_uuid.uuid4()) self.name= name self.stats= '' self.health= _random.randint(1,3) self.inventory= inventory or [] self.damage= _random.randint(1,2) # this is the punch damage amount self.max_weight= 5 # this is the max inventory weight self.agility= _random.randint(5,30) # chance to avoid an hit self.kills= 0 # track the number of kills self.accused_damage= 0 self.survived_days= 0 # track the number of the survived days self.equipped_weapon= None self.gender= _random.sample(['m', 'f', '-'], 1)[0] # for now get a random gender self.reputation= 50 #Like RDR2 the player can be evil(0) or good(100). This should influence the sponsors and internal alliance ### control methods def get_name_and_stats(self): health= '♥️' * self.health strength= '⚔️' * self.damage agility= f'🚀{self.agility}' if self.player_gender_is_male(): gender= '♂' elif self.player_gender_is_female(): gender= '♀' else: gender= '⚩' name= f'{self.name} {gender} {health} {strength} {agility}' return name def get_id(self): return self.id def get_name(self): return self.name def get_gender(self): return self.gender def player_gender_is_male(self): return self.gender == 'm' def player_gender_is_female(self): return self.gender == 'f' def player_gender_is_not_binary(self): return self.gender == '-' def get_inventory(self): return self.inventory def get_inventory_weight(self): weight= 0 for inv in self.get_inventory(): weight+= inv.get_weight() return weight def get_max_weight(self): return self.max_weight def get_health(self): return self.health def get_damage(self): if not self.equipped_weapon: return self.damage return self.equipped_weapon.damage def get_agility(self): return self.agility def get_reputation(self): return self.reputation def get_data(self): return { 'id': self.get_id(), 'name': self.get_name(), 'name_stats': self.get_name_and_stats(), 'gender': self.get_gender(), 'inventory': self.get_inventory(), 'inventory_weight': self.get_inventory_weight(), 'health': self.get_health(), 'damage': self.get_damage(), 'agility': self.get_agility(), 'reputation': self.get_reputation(), } def is_alive(self): return self.health > 0 def get_kills(self): return self.kills ### player actions def _equip_weapon(self): if not self.inventory: return available_weapons= [] for inv in self.get_inventory(): # XXX # i don't know yet if this is ok, # we'll see it when weapon and items are defined if not inv.damage: continue available_weapons.append(inv) self.equipped_weapon= random.sample(available_weapons, 1)[0] def dodge(self): # maybe depend on the attack, if it is a gun shot it's quite impossible to dodge rnd= _random.randint(0, 100) if rnd < self.agility: return True return False def accuses_damage(self, damage): self.health-= damage self.accused_damage+= damage if self.health > 0: return self.get_health() self.health= 0 if self.player_gender_is_male(): print(f'[{self.get_name_and_stats()}]: Guarino, perdonami se sono morto x.x') elif self.player_gender_is_female(): print(f'[{self.get_name_and_stats()}]: Guarino, perdonami se sono morta x.x') else: print(f'[{self.get_name_and_stats()}]: Guarino, perdonami se sono mort* x.x') return damage def attack(self, target): self._equip_weapon() if target.dodge(): if target.player_gender_is_male(): msg= f'Ehhhh voleviiii!!! sei lentoo! {target.get_name_and_stats()} schiva il colpo di {self.get_name_and_stats()}' elif target.player_gender_is_female(): msg= f'Ehhhh voleviiii!!! sei lentaa! {target.get_name_and_stats()} schiva il colpo di {self.get_name_and_stats()}' else: msg= f'Ehhhh voleviiii!!! sei lent##! {target.get_name_and_stats()} schiva il colpo di {self.get_name_and_stats()}' return 0, msg target.accuses_damage(self.damage) msg= f'{self.get_name_and_stats()} Colpisce {target.get_name_and_stats()}' self.kills+= 1 return self.damage, msg def get_item(self, item): if self.get_inventory_weight() + item.get_weight() >= self.get_max_weight(): if self.player_gender_is_male(): print(f'Sono sovraccarico, {self.get_name_and_stats} non puo\' prendere questo oggetto') elif self.player_gender_is_female(): print(f'Sono sovraccarica, {self.get_name_and_stats} non puo\' prendere questo oggetto') else: print(f'Sono sovraccaric#, {self.get_name_and_stats} non puo\' prendere questo oggetto') return False self.inventory.append(item) def escape(self): # TODO It can run away from the fighting return def heal(self): # TODO heal system # if you have a wound and you have a medikit item, # you can heal your wound or sickness return