You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.5 KiB
108 lines
3.5 KiB
from random import randint
|
|
from enum import Enum
|
|
|
|
from graphics.engine import Screen
|
|
from graphics.layers import Sprite
|
|
|
|
class StatsSet:
|
|
#HP, ATK, DEF, INITIATIVE, XPCOEF
|
|
def __init__(self, hp, atkP, defP, initiative, xpcoef):
|
|
self.hp = hp
|
|
self.atkP = atkP
|
|
self.defP = defP
|
|
self.initiative = initiative
|
|
self.xpcoef = xpcoef
|
|
|
|
class ClassType(Enum):
|
|
GUERRIER = StatsSet(20, 10, 15, 5, 8)
|
|
MAGICIEN = StatsSet(15, 15, 6, 5, 7)
|
|
VOLEUR = StatsSet(9, 30, 9, 7, 9)
|
|
ELFE = StatsSet(13, 22, 1, 5, 10)
|
|
|
|
class Personnage:
|
|
def __init__(self, nom, class_type, place):
|
|
self.nom = nom
|
|
self.class_name = class_type.name
|
|
self.class_type = class_type.value
|
|
|
|
self.__xp = 1
|
|
|
|
self.potions = [Item(Material.POTION, 10)]
|
|
self.arme = Item(*ClassItem[self.class_name].value)
|
|
|
|
self.__hp = self.class_type.hp + self.arme.stats.hp
|
|
|
|
Sprite(3, self.class_name, place)
|
|
|
|
def jet_attaque(self):
|
|
damage = randint(1, 20)
|
|
self.change_exp(self.class_type.xpcoef * self.__xp)
|
|
return damage + self.class_type.initiative + self.arme.stats.initiative
|
|
|
|
def jet_defense(self):
|
|
damage = randint(1, 20)
|
|
self.change_exp(self.class_type.xpcoef * self.__xp)
|
|
return damage + self.class_type.initiative + self.arme.stats.initiative
|
|
|
|
def get_hp(self):
|
|
return self.__hp
|
|
def change_hp(self, nb_hp):
|
|
if self.__hp - nb_hp < 0:
|
|
self.__hp = 0
|
|
elif self.__hp - nb_hp > self.class_type.hp + self.arme.stats.hp:
|
|
self.__hp = self.class_type.hp + self.arme.stats.hp
|
|
else:
|
|
self.__hp -= nb_hp
|
|
|
|
def get_xp(self):
|
|
return self.__xp
|
|
def change_exp(self, nb_exp):
|
|
if nb_exp > 0:
|
|
self.__xp += nb_exp
|
|
else:
|
|
raise ValueError("nb_exp attends un nombre positif")
|
|
|
|
def affiche_caracteristiques(self):
|
|
return (f"Nom: {self.nom}",
|
|
f"Type de classe: {self.class_name}",
|
|
f"Vie: {self.__hp}",
|
|
f"Expérience: {self.__xp}",
|
|
"Stats (classe + inventaire):",
|
|
f"- HP: {self.class_type.hp} + {self.arme.stats.hp}",
|
|
f"- ATK%: {self.class_type.atkP} + {self.arme.stats.atkP}",
|
|
f"- DEF%: {self.class_type.defP} + {self.arme.stats.defP}",
|
|
f"- INITIATIVE: {self.class_type.initiative} + {self.arme.stats.initiative}",
|
|
f"- XPCOEF: {self.class_type.xpcoef} + {self.arme.stats.xpcoef}"
|
|
)
|
|
|
|
def reduced_stats(self):
|
|
return(f"Ennemi: {self.nom}",
|
|
f"Type: {self.class_name}",
|
|
f"Vie: {self.__hp}"
|
|
)
|
|
|
|
|
|
class Item():
|
|
def __init__(self, material, stats, meta=None):
|
|
self.material = material
|
|
self.meta = material.value if meta == None else meta
|
|
self.stats = stats
|
|
|
|
class ItemMeta:
|
|
def __init__(self, name, description):
|
|
self.name = name
|
|
self.description = description
|
|
|
|
class Material(Enum):
|
|
POTION = ItemMeta("Potion", "TODO")
|
|
EPEE = ItemMeta("Épée", "TODO")
|
|
BATON = ItemMeta("Bâton", "TODO")
|
|
DAGUE = ItemMeta("Dague", "TODO")
|
|
ARC = ItemMeta("Arc", "TODO")
|
|
|
|
class ClassItem(Enum):
|
|
#HP, ATK, DEF, INITIATIVE, XPCOEF
|
|
GUERRIER = (Material.EPEE, StatsSet(3, 5, 2, 6, 0))
|
|
MAGICIEN = (Material.BATON, StatsSet(8, 1, 2, 3, 0))
|
|
VOLEUR = (Material.DAGUE, StatsSet(1, 9, 1, 1, 0))
|
|
ELFE = (Material.ARC, StatsSet(4, 2, 5, 3, 0))
|