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.

126 lines
3.7 KiB

2 years ago
from random import randint
from graphics.layers import Sprite
2 years ago
from util.sqlite import Connection
2 years ago
class Material:
POTION = "POTION"
EPEE = "EPEE"
BATON = "BATON"
DAGUE = "DAGUE"
ARC = "ARC"
2 years ago
#TODO: inventaire mysql
class Inventaire:
def __init__(self, id, item):
self._id = id
def append(self, item):
conn = Connection()
conn.db.execute("INSERT INTO inventaire (personnage_id, nom) VALUES (?, ?);", (self._id, item))
conn.db.execute("SELECT last_insert_rowid();")
self._id = conn.db.fetchone()[0]
conn.close()
2 years ago
class Personnage:
def __init__(self, nom, cat, personnage_type):
2 years ago
expcoef = None
2 years ago
item = None
2 years ago
if cat == "Guerrier":
2 years ago
item = Material.EPEE
2 years ago
expcoef = 10
2 years ago
elif cat == "Magicien":
2 years ago
item = Material.BATON
2 years ago
expcoef = 10
2 years ago
elif cat == "Voleur":
2 years ago
item = Material.DAGUE
2 years ago
expcoef = 3
2 years ago
elif cat == "Elfe":
2 years ago
item = Material.ARC
2 years ago
expcoef = 8
2 years ago
conn = Connection()
conn.db.execute(f"INSERT INTO personnages (nom, pdv, exp, cat, expcoef) VALUES (?,?,?,?,?);", (nom, 20, 1, cat, expcoef))
conn.commit()
conn.db.execute("SELECT last_insert_rowid();")
self._id = conn.db.fetchone()[0]
conn.close()
2 years ago
2 years ago
self.inventaire = Inventaire(self._id, item)
2 years ago
Sprite(3, cat, personnage_type)
2 years ago
def db_erase(self):
conn = Connection()
conn.db.execute("DELETE FROM personnages WHERE id=?;", (self._id,))
conn.close()
2 years ago
2 years ago
def __select_value(self, value):
2 years ago
conn = Connection()
conn.db.execute("SELECT "+value+" FROM personnages WHERE id=?;", (self._id,))
value = conn.db.fetchone()
conn.close()
return value[0] if value is not None else None
2 years ago
def get_nom(self):
return self.__select_value("nom")
def get_pdv(self):
return self.__select_value("pdv")
def get_exp(self):
return self.__select_value("exp")
def get_cat(self):
return self.__select_value("cat")
def get_expcoef(self):
return self.__select_value("expcoef")
def set_nom(self, v):
2 years ago
conn = Connection()
conn.db.execute("UPDATE personnages SET nom=? WHERE id=?;", (v, self._id))
conn.close()
2 years ago
def change_pdv(self, v):
2 years ago
conn = Connection()
conn.db.execute("UPDATE personnages SET pdv = CASE WHEN pdv - ? <= 0 THEN 0 ELSE pdv - ? END WHERE id=?;", (v, v, self._id))
conn.close()
2 years ago
def change_exp(self, v):
2 years ago
conn = Connection()
2 years ago
if v > 0:
2 years ago
conn.db.execute("UPDATE personnages SET exp=exp+? WHERE id=?;", (v, self._id))
2 years ago
else:
raise ValueError("v attends un nombre positif")
2 years ago
conn.close()
2 years ago
def set_cat(self, v):
2 years ago
conn = Connection()
conn.db.execute("UPDATE personnages SET cat=? WHERE id=?;", (v, self._id))
conn.close()
2 years ago
def set_expcoef(self, v):
2 years ago
conn = Connection()
conn.db.execute("UPDATE personnages SET expcoef=? WHERE id=?;", (v, self._id))
conn.close()
2 years ago
2 years ago
def jet_attaque(self):
damage = randint(1, 20)
2 years ago
self.change_exp(self.get_expcoef())
2 years ago
return damage
def jet_defense(self):
damage = randint(1, 20)
2 years ago
self.change_exp(self.get_expcoef())
2 years ago
return damage
def affiche_caracteristiques(self):
2 years ago
return (f"Nom: {self.get_nom()}",
f"Type de classe: {self.get_cat()}",
f"Vie: {self.get_pdv()}",
f"Expérience: {self.get_exp()}",
f"XPCOEF: {self.get_expcoef()}"
2 years ago
)
def affiche_inventaire(self):
2 years ago
return ["- "+item for item in self.inventaire]