From b6a29b45e953f9706f038fec1e8750260a940c9d Mon Sep 17 00:00:00 2001 From: "barraux.a" Date: Tue, 20 Sep 2022 20:46:23 +0200 Subject: [PATCH] Version final --- cli.py | 9 +- getkey/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 633 bytes getkey/__pycache__/keynames.cpython-38.pyc | Bin 0 -> 10552 bytes getkey/__pycache__/platforms.cpython-38.pyc | Bin 0 -> 8339 bytes getkey/__pycache__/unikeys.cpython-38.pyc | Bin 0 -> 4585 bytes main.py | 262 +++++++++++++++++--- 6 files changed, 235 insertions(+), 36 deletions(-) create mode 100644 getkey/__pycache__/__init__.cpython-38.pyc create mode 100644 getkey/__pycache__/keynames.cpython-38.pyc create mode 100644 getkey/__pycache__/platforms.cpython-38.pyc create mode 100644 getkey/__pycache__/unikeys.cpython-38.pyc diff --git a/cli.py b/cli.py index 48860d1..2db6e6d 100644 --- a/cli.py +++ b/cli.py @@ -94,17 +94,16 @@ class Cli(): except: pass - def draw_bar(self, percent, x, y, **kwargs): + def draw_bar(self, percent, x, y, length=40, **kwargs): """dessine la barre de vie""" - length = 40 part_to_draw = length * percent // 100 for key, value in kwargs.items(): if key == 'color': self.draw('|{}{}|'.format(''.join(['█' for i in range(part_to_draw)]), ''.join( [' ' for i in range(length - part_to_draw)])), x, y, color=value) - else: - self.draw('|{}{}|'.format(''.join(['█' for i in range(part_to_draw)]), ''.join( - [' ' for i in range(length - part_to_draw)])), x, y, color='WHITE') + return + self.draw('|{}{}|'.format(''.join(['█' for i in range(part_to_draw)]), ''.join( + [' ' for i in range(length - part_to_draw)])), x, y, color='GREEN') def wipe(self): """vide le contenu de self.screen""" diff --git a/getkey/__pycache__/__init__.cpython-38.pyc b/getkey/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a6190b30dca07bfbc4773e633f53075a8e36828 GIT binary patch literal 633 zcmYjNJ#P~+7`ANZ3BN>-*m9V6uj8+}i!DySQ5ZA)YfI|6fdf#HqQ4OQ)tKMt)97})~A=SBpOFPZA#(hwW)mX#Xt7UnA-Tk z&V8;gL|Mq~!Bu=z=)x5c*cN&*vQB6zj2!K%9FN|A7-JvLi&AZqhm)hp(fF3nI5c*x zQJfnBeN6=5BfGJ_yUVmD2?`C+0br1{(|n|i@yXQ+o`z|K^RX}s>#21zh;*UcN^N`$ zV10B&r$R6M9_JUzSlF5KAIRJZ^#lBV_4GJDvmoVDW7Z-+RckjZ>sIDcIFX--*{W^w zSuMpv<;}*ut2KBU&Z_dIYPkvIx@*pPI1A^KX5-UGRV~|6Jq{PP_W_1D#kUE;86Lum O|4?$5P)u=*DftU5>$aZ& literal 0 HcmV?d00001 diff --git a/getkey/__pycache__/keynames.cpython-38.pyc b/getkey/__pycache__/keynames.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd9326a4eecbc02c9d7cc9864950b05cb894599d GIT binary patch literal 10552 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 + ) ( + /`-.\\ + / \\ + / _ _\\ + :,' `-.' `: + | | + : ; + \ / + `.___.' """.split('\n') + self.opponent = [Guerrier("Guerrier", 80, 45), Voleur("Voleur", 80, 45), Magicien("Magicien", 80, 45), Elfe("Elfe", 80, 45)] self.title = """ ██ ███████ ██ ██ ██████ ███████ ██████ ██████ ██ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██ ██ ██ ██ █████ ██████ ██ ██ ██ █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ███████ ██████ ██████ ███████ ██ ██ ██████ ███████ ███████ """.split('\n') + def draw_arena(self, ennemi, choice): + """Dessine toute l'arène et les joueur durant la phase jeu""" + gui.wipe() + + self.character.display('right', color='BLUE') + self.opponent[ennemi].display('left', color='GREEN') + + gui.draw_bar(self.character.pdv * 100 // self.character.max_pdv, 5, 25, 30, color='RED') + gui.draw_bar(self.character.xp * 100 // 20, 5, 27, 30, color='GREEN') + gui.draw(self.character.nom, 15, 2, weight='BOLD') + gui.draw(str(self.character.pdv), 38, 25, color='RED') + gui.draw(str(self.character.xp), 38, 27, color='GREEN') + + + gui.draw_bar(self.opponent[ennemi].pdv * 100 // self.opponent[ennemi].max_pdv, 75, 25, 30, color='RED') + gui.draw_bar(self.opponent[ennemi].xp * 100 // 20, 75, 27, 30, color='GREEN') + gui.draw(self.opponent[ennemi].nom, 90, 2) + gui.draw(str(self.opponent[ennemi].pdv), 108, 25, color='RED') + gui.draw(str(self.opponent[ennemi].xp), 108, 27, color='GREEN') + + gui.draw(''.join(['_' for i in range(self.width)]), 0, 28) + + gui.draw('Attaquer', 5, 30) + gui.draw('Inventaire', 5, 31) + gui.draw('Quiter', 5, 32) + gui.draw('->', 2, 30 + choice) + + gui.display() + + def show_inventory(self, position): + """Dessine l'inventaire""" + gui.wipe() + gui.draw("Pressez échape pour sortir de l'inventaire", 45, 0) + gui.draw('+' + ''.join(['-' for i in range(self.width-2)]) + '+', 0, 1) + gui.draw('+' + ''.join(['-' for i in range(self.width-2)]) + '+', 0, self.height-2) + for i in range(1, self.height-3): + if i == 16: + gui.draw(''.join(['+'+''.join(['-' for j in range(29)]) for k in range(4)]), 0, 1+i) + else: + gui.draw(''.join(['|'+''.join([' ' for j in range(29)]) for k in range(4)]), 0, 1+i) + for j in range(self.character.inv.count('potion')): + x = j % 4 + y = j // 4 + if [x, y] == position: + color_fill = 'YELLOW' + else: + color_fill = 'WHITE' + gui.draw('Eau de vie', 30*x+10, 17*y+2, color=color_fill) + for i in range(len(self.potion_shape)): + gui.draw(self.potion_shape[i], 30*x+6, 17*y+3+i, color=color_fill) + gui.display() + + def combat(self, ennemi): + """Simule l'attaque des joeurs""" + # attaque du joueur + if self.character.jet_attaque() > self.opponent[ennemi].jet_defense(): + self.opponent[ennemi].change_pdv(-1*random.randint(1, 8)) + self.opponent[ennemi].blink('RED', 'GREEN') + # test si l'ennemi est mort + if self.opponent[ennemi].pdv <= 0: + self.opponent[ennemi].move(40, 0, 4) + self.character.change_xp(1) + self.character.max_pdv += 5 + self.character.change_pdv(round(self.character.max_pdv * 0.2)) + if random.randint(0,5) == 0: + self.character.inv.append('potion') + + ennemi = random.randint(0, 3) + self.opponent[ennemi].__init__(self.opponent[ennemi].nom, 120, 5, random.randint(1, self.character.xp+1)) + self.opponent[ennemi].max_pdv = 20 + 5 * (self.opponent[ennemi].xp-1) + self.opponent[ennemi].pdv = self.opponent[ennemi].max_pdv + self.opponent[ennemi].move(-40, 0, 4) + return ennemi + else: + self.character.change_pdv(-1*random.randint(1, 4)) + self.character.blink('RED', 'BLUE') + # test si le joueur est toujours en vie + if self.character.pdv <= 0: + return None + # attaque de l'ennemi + if self.opponent[ennemi].jet_attaque() < self.character.jet_defense(): + self.opponent[ennemi].change_pdv(-1*random.randint(1, 4)) + self.opponent[ennemi].blink('RED', 'GREEN') + # test si l'ennemi est mort + if self.opponent[ennemi].pdv <= 0: + self.opponent[ennemi].move(40, 0, 4) + self.character.change_xp(1) + self.character.max_pdv += 5 + self.character.change_pdv(round(self.character.max_pdv * 0.2)) + if random.randint(0,5) == 0: + self.character.inv.append('potion') + + ennemi = random.randint(0, 3) + self.opponent[ennemi].__init__(self.opponent[ennemi].nom, 120, 5, random.randint(1, self.character.xp+1)) + self.opponent[ennemi].max_pdv = 20 + 5 * (self.opponent[ennemi].xp-1) + self.opponent[ennemi].pdv = self.opponent[ennemi].max_pdv + self.opponent[ennemi].move(-40, 0, 4) + return ennemi + else: + self.character.change_pdv(-1*random.randint(1, 8)) + self.character.blink('RED', 'BLUE') + # test si le joueur est toujours en vie + if self.character.pdv <= 0: + return None + def play(self): + """Gère la phase de jeu""" + gui.wipe() + + self.character.move(-40, 0, 4, color='BLUE') + ennemi = random.randint(0, 3) + self.opponent[ennemi].move(0, -40, 4, color='GREEN') + choice = 0 + + while self.character.pdv > 0: + self.draw_arena(ennemi, choice) + while True: + key = getkey.getkey() + if key == getkey.keys.UP: + choice = abs((choice-1) %3) + break + elif key == getkey.keys.DOWN: + choice = abs((choice+1) %3) + break + elif key == getkey.keys.ENTER: + if choice == 0: + # combat + result = self.combat(ennemi) + if result != None: + ennemi = result + if choice == 1: + # affichage de l'inventaire + position = [0, 0] + + while True: + self.show_inventory(position) + key = getkey.getkey() + if key == getkey.keys.UP: + if position[1] > 0: + position[1] -= 1 + elif key == getkey.keys.DOWN: + if position[1] < 1: + position[1] += 1 + elif key == getkey.keys.RIGHT: + if position[0] < 3: + position[0] += 1 + elif key == getkey.keys.LEFT: + if position[0] > 0: + position[0] -= 1 + elif key == getkey.keys.ENTER: + self.character.pdv += round((self.character.max_pdv - self.character.pdv) * 0.5) + if self.character.pdv > self.character.max_pdv: + self.character.pdv = self.character.max_pdv + self.character.inv.remove('potion') + elif key == getkey.keys.ESCAPE: + break + if choice == 2: + exit() + break + + # le joueur à perdu + gui.wipe() - self.character.move(-40, 0, 2) - self.character.blink('RED', 'BLUE') + + game_over = """ + ██████ █████ ███ ███ ███████ ██████ ██ ██ ███████ ██████ +██ ██ ██ ████ ████ ██ ██ ██ ██ ██ ██ ██ ██ +██ ███ ███████ ██ ████ ██ █████ ██ ██ ██ ██ █████ ██████ +██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ + ██████ ██ ██ ██ ██ ███████ ██████ ████ ███████ ██ ██ + + +""".split('\n') + for i in range(len(game_over)): + gui.draw(game_over[i], 60 - len(game_over[i])//2, 12+i, color='RED') + gui.display() + def setting(self, name, number_char): """permet de choisir son type de personnage"""