From bbdc12c5bae8998e356564d52cdd418d805ad325 Mon Sep 17 00:00:00 2001 From: Kalyax Date: Mon, 28 Nov 2022 17:48:32 +0100 Subject: [PATCH] sql attributs --- .gitignore | 3 +- game/core.py | 9 +++-- game/personnage.py | 85 ++++++++++++++++++++++++++++++++------------- graphics/engine.py | 2 +- graphics/layers.py | 19 +++++----- jeu.db | Bin 12288 -> 16384 bytes main.py | 27 +++++++++----- util/sqlite.py | 18 +++++----- 8 files changed, 108 insertions(+), 55 deletions(-) diff --git a/.gitignore b/.gitignore index ed8ebf5..45bb9df 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -__pycache__ \ No newline at end of file +__pycache__ +jeu.db \ No newline at end of file diff --git a/game/core.py b/game/core.py index b18b946..757c545 100644 --- a/game/core.py +++ b/game/core.py @@ -10,16 +10,17 @@ class Game: self.ennemy = None def late_init(self): - self.personnage = Personnage(" ", "Guerrier", "player") + self.personnage = Personnage("a", "Guerrier", "player") self.ennemy = self.rand_ennemy() def rand_ennemy(self): classes = ["Guerrier", "Magicien", "Voleur", "Elfe"] - noms = ["Bill Gates", "Dark Vador", "Gargamel", "G-Man"] + noms = ["Bill Gates", "Dark Vador", "Gargamel", "Arthur"] return Personnage(noms[randint(0, 3)], classes[randint(0, 3)], "OPPONENT") def init_personnage(self, nom, class_type): self.personnage = Personnage(nom, class_type, "PLAYER") + self.ennemy = self.rand_ennemy() def attack(self, attacker, victim): atk_jet = attacker.jet_attaque() @@ -34,7 +35,10 @@ class Game: if self.personnage.get_pdv() == 0: for i in range(50): PopUp(1, "Vous avez perdu! Relancez le jeu pour continuer...", True) + self.ennemy.db_erase() + self.personnage.db_erase() if self.ennemy.get_pdv() == 0: + self.ennemy.db_erase() self.ennemy = self.rand_ennemy() potions = "" @@ -46,7 +50,6 @@ class Game: if len(inv) > 3: maxpot = 6-len(inv) for i in range(randint(0, maxpot)): - random = randint(5, 25) inv.append(Material.POTION) potions += f"- Potion de 10HP\n" diff --git a/game/personnage.py b/game/personnage.py index 63aa8e1..b7d45e8 100644 --- a/game/personnage.py +++ b/game/personnage.py @@ -1,7 +1,7 @@ from random import randint from graphics.layers import Sprite -import util.sqlite as sqlite +from util.sqlite import Connection class Material: POTION = "POTION" @@ -10,38 +10,59 @@ class Material: DAGUE = "DAGUE" ARC = "ARC" +#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() + class Personnage: def __init__(self, nom, cat, personnage_type): - #self.nom = nom - #self.__pdv = 20 - #self.__exp = 1 - #self.cat = cat expcoef = None + item = None if cat == "Guerrier": - #self.inventaire = [Material.EPEE, Material.POTION] + item = Material.EPEE expcoef = 10 elif cat == "Magicien": - #self.inventaire = [Material.BATON, Material.POTION] + item = Material.BATON expcoef = 10 elif cat == "Voleur": - #self.inventaire = [Material.DAGUE, Material.POTION] + item = Material.DAGUE expcoef = 3 elif cat == "Elfe": - #self.inventaire = [Material.ARC, Material.POTION] + item = Material.ARC expcoef = 8 - sqlite.db.execute( - """INSERT INTO personnages (nom, pdv, exp, cat, expcoef) VALUES (?, ?, ?, ?, ?);""", - (nom, 20, 1, cat, expcoef) - ) - sqlite.db.execute("SELECT last_insert_rowid();") - self._id = sqlite.db.fetchone()[0] + 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() + self.inventaire = Inventaire(self._id, item) Sprite(3, cat, personnage_type) + + def db_erase(self): + conn = Connection() + conn.db.execute("DELETE FROM personnages WHERE id=?;", (self._id,)) + conn.close() + + def __select_value(self, value): - sqlite.db.execute("SELECT ? FROM personnages WHERE id=?", (value, self._id)) - return sqlite.db.fetchone() + 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 def get_nom(self): return self.__select_value("nom") @@ -55,27 +76,41 @@ class Personnage: return self.__select_value("expcoef") def set_nom(self, v): - Connection.db.execute(f"UPDATE personnages SET nom=? WHERE id={self.id}", v) + conn = Connection() + conn.db.execute("UPDATE personnages SET nom=? WHERE id=?;", (v, self._id)) + conn.close() + def change_pdv(self, v): - Connection.db.execute(f"UPDATE personnages SET pdv = CASE WHEN pdv - {v} < 0 THEN 0 ELSE {v} END WHERE id={self.id}") + 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() + def change_exp(self, v): + conn = Connection() if v > 0: - Connection.db.execute(f"UPDATE personnages SET exp=exp+? WHERE id={self.id}", v) + conn.db.execute("UPDATE personnages SET exp=exp+? WHERE id=?;", (v, self._id)) else: raise ValueError("v attends un nombre positif") + conn.close() + def set_cat(self, v): - Connection.db.execute(f"UPDATE personnages SET cat=? WHERE id={self.id}", v) + conn = Connection() + conn.db.execute("UPDATE personnages SET cat=? WHERE id=?;", (v, self._id)) + conn.close() + def set_expcoef(self, v): - Connection.db.execute(f"UPDATE personnages SET expcoef=? WHERE id={self.id}", v) + conn = Connection() + conn.db.execute("UPDATE personnages SET expcoef=? WHERE id=?;", (v, self._id)) + conn.close() def jet_attaque(self): damage = randint(1, 20) - self.change_exp(self.get_expcoef() * self.get_exp()) + self.change_exp(self.get_expcoef()) return damage def jet_defense(self): damage = randint(1, 20) - self.change_exp(self.get_expcoef() * self.get_exp()) + self.change_exp(self.get_expcoef()) return damage def affiche_caracteristiques(self): @@ -87,4 +122,4 @@ class Personnage: ) def affiche_inventaire(self): - return ["- "+item for item in self.inventaire] \ No newline at end of file + return ["- "+item for item in self.inventaire] diff --git a/graphics/engine.py b/graphics/engine.py index f2bdbc5..9ee7dc6 100644 --- a/graphics/engine.py +++ b/graphics/engine.py @@ -17,7 +17,7 @@ class Screen: self.__layers = {} self.handlers = [] - game.late_init() + #game.late_init() self.game = game def set_layer(self, layer): diff --git a/graphics/layers.py b/graphics/layers.py index c3b6720..258e94a 100644 --- a/graphics/layers.py +++ b/graphics/layers.py @@ -25,14 +25,17 @@ class GUI(Layer): color = (Colors.REDBG, Colors.BLACK) if self.__buttons[self.__current] == button else (Colors.WHITEBG, Colors.BLACK) self.put_string(button, x, self.y-10, color) x += len(button)+1 - - stats = Screen.instance.game.personnage.affiche_caracteristiques() - for i in range(5): - self.put_string(stats[i], 1, self.y-8+i, [Colors.RED2]) - - ennemy_stats = Screen.instance.game.ennemy.affiche_caracteristiques() - for i in range(5): - self.put_string(ennemy_stats[i], self.x-(self.x-2)//3, self.y-8+i, [Colors.BLUE2]) + personnage = Screen.instance.game.personnage + if personnage is not None: + stats = personnage.affiche_caracteristiques() + for i in range(5): + self.put_string(stats[i], 1, self.y-8+i, [Colors.RED2]) + + ennemy = Screen.instance.game.ennemy + if ennemy is not None: + ennemy_stats = ennemy.affiche_caracteristiques() + for i in range(5): + self.put_string(ennemy_stats[i], self.x-(self.x-2)//3, self.y-8+i, [Colors.BLUE2]) else: x = 1 diff --git a/jeu.db b/jeu.db index 6f2aafc0b77272595fd0afa2242a7a58ec5200ad..44e1e038ea6449624507db61aad1b3cc4efe8ee4 100644 GIT binary patch literal 16384 zcmeI&&uiN-6bEq0Da}%7v(b*63NPeh(^3khyRL3f(y-KNRdB(XzFdl`)G`|uAL$xrr2rw6(?Z~KX&!6+Jf2_3N4jB|EG#F%l& z7+cZjEDYVqKJ!_}<9D57@BQ7n9#B}nWg9;>Ci;ee00bZa0SG_<0uX=z1R(H#3w-qp z#Y(lxzi%hrr$G7PRE3G>N14`2T?*S3h6X6Oyo zu71<{_Kp`TwHm)UxX+oHIny+9xiTF~fPYJE+@H>uBVDhDZPl0YGe-4vwf^)v>0G^$ z8qD*}W?U>qTALf?pRD{#Ul0(000bZa0SG_<0uX=z1Rwwb2>e?D`;UE2rBP&6UV6)q z{UD&Gm#BD41OxSIQxw@7UfSlK+G}7(fB*y_009U<00Izz00bZa v0SG|gWeAjcp~f>i9~x=>uQ&Z8AOHafKmY;|fB*y_009U<00Izr!2*8(B>u^j delta 257 zcmZo@U~EX3ASJ}W$iTqB48$Eh}a;u#XDVW?xMsSpt4>FXF2so?Dzsl%m!1oHB86~Y{YoIMi;1Cokj|XD>)8Q}FZ)0kcyp3ZQIdW~lt+d;Hu%3V!|}3VxwJK5)}CO_|ulJ(U?5 zGV@YWD~bzqGD}k96H80-!Tk7w)S}}2yu8Hp)Z%zUBo4@f93USqG7w