def gestion_inventaire(self): self.inventaire.selected = True self.current_player.equipement.selected = False k = None special = False while k != b'\x1b': self.current_player.imprime() self.inventaire.printScreen(130, 6) if k: printXY(5, 40, "Key:", k) if special: printXY(5, 41, "Special") print(end="", flush=True) k = getch() if k == b'\xe0': k = getch() special = True if k == b'H': # Fleche Haut if self.inventaire: temp_selected = self.inventaire.ligne_selected - 1 if temp_selected < 0: self.inventaire.ligne_selected = len( self.inventaire.liste) - 1 else: self.inventaire.ligne_selected = temp_selected elif k == b'P': # Fleche Bas if self.inventaire: self.inventaire.ligne_selected += 1 if self.inventaire.ligne_selected >= len( self.inventaire.liste): self.inventaire.ligne_selected = 0 else: special = False if k == b'\x1b': # Touche Echap pass self.inventaire.selected = False self.current_player.equipement.selected = True
def printScreen(self, posX, posY): self.posX = posX self.posY = posY # │┤ ╣║ ╗╝ ┐└ ┴ ┬├ ─ ┼ ╚ ╔╩ ╦ ╠ ═ ╬ ┘┌ █ ▄ tailleMax = self.tailleElt + 5 + self.tailleValeur tailleG = (tailleMax - 2 - len(self.titre)) // 2 tailleD = tailleMax - len(self.titre) - tailleG - 2 if self.selected: couleur_fond = colors.bcolors.GBLEU else: couleur_fond = colors.bcolors.BLEU if self.selected: selectedColor = colors.fcolors.GVERT else: selectedColor = colors.fcolors.ENDC setColor(selectedColor + couleur_fond) printXY(posX - 2, posY, "┌", end="") print("═" * tailleG, self.titre, "═" * tailleD, end="┐") setColor(colors.fcolors.ENDC + couleur_fond) posY += 1 objet_color_libelle = "" objet_color_code = None for idx, rez in enumerate( sorted(self.liste, key=self.liste_classe.order)): rezstr = self.liste[rez] objet = rezstr if rezstr == None: rezstr = "Aucun" if self.selected and idx == self.ligne_selected: # ligne selectionnee if objet.__class__.__name__ in ("Objet", "Inventaire"): objet_color_code = RARETE.get_valof_from( objet.rarete, "couleur") # RARETE.couleur[objet.rarete] objet_color_libelle = RARETE.get_valof_from( objet.rarete, "libelle") # RARETE.libelle[objet.rarete] rezstr = objet.nom[:self.tailleValeur] setColor(objet_color_code + couleur_fond) else: setColor(colors.fcolors.GJAUNE + couleur_fond) printXY(posX - 2, posY, ">") else: # ligne non selectionnee if objet.__class__.__name__ in ("Objet", "Inventaire"): rezstr = objet.nom[:self.tailleValeur] # setColor(RARETE.couleur[objet.rarete] + couleur_fond) setColor( RARETE.get_valof_from(objet.rarete, "couleur") + couleur_fond) else: setColor(colors.fcolors.ENDC + couleur_fond) if objet.__class__.__name__ in ("Objet", "Inventaire") or objet is None: printXY(posX, posY, ("{:" + str(self.tailleElt) + "} : {:" + str(self.tailleValeur) + "} ").format(rez, rezstr)) else: resequip = self.depuis_equipement[rez] tailleVal1 = self.tailleValeur // 2 tailleVal2 = self.tailleValeur - tailleVal1 printXY(posX, posY, ("{:" + str(self.tailleElt) + "} : {:" + str(tailleVal1) + "}{:" + str(tailleVal2) + "} ").format(rez, rezstr, resequip)) if self.selected and idx == self.ligne_selected: printXY(posX + self.tailleElt + self.tailleValeur + 4, posY, "<") posY += 1 setColor(selectedColor + couleur_fond) printXY(posX - 2, posY, "└", end="") print("─" * tailleMax, end="┘") if hasattr(self, "points"): if self.points_max > 0: posY += 1 setColor(colors.fcolors.ENDC) printXY(posX, posY, ("{:" + str(self.tailleElt) + "} :").format( "Points dispo"[:self.tailleElt])) setColor(colors.fcolors.GVERT) printXY(posX + self.tailleElt + 3, posY, ("{:" + str(self.tailleValeur) + "}").format( self.points)) elif objet_color_libelle != "": posY += 1 setColor(colors.fcolors.ENDC) printXY(posX, posY, ("{:" + str(self.tailleElt) + "} :").format( "Rareté"[:self.tailleElt])) setColor(objet_color_code) printXY(posX + self.tailleElt + 3, posY, ("{:" + str(self.tailleValeur) + "}").format(objet_color_libelle)) setColor(colors.fcolors.ENDC)
def gestion_joueurs(self): k = None special = False while k != b'\x1b': self.current_player.imprime() if k: printXY(5, 40, "Key:", k) if special: printXY(5, 41, "Special") print(end="", flush=True) k = getch() if k == b'\xe0': k = getch() special = True if k == b'K': # Fleche Gauche liste_fenetres = ((self.current_player.caracteristiques, self.current_player.equipement), (self.current_player.resistances, self.current_player.caracteristiques), (self.current_player.equipement, self.current_player.resistances)) for (fen_src, fen_dest) in liste_fenetres: if fen_src.selected: fen_src.selected = False fen_dest.selected = True break else: liste_fenetres[-1][0].selected = True elif k == b'M': # Fleche Droite liste_fenetres = ((self.current_player.caracteristiques, self.current_player.resistances), (self.current_player.resistances, self.current_player.equipement), (self.current_player.equipement, self.current_player.caracteristiques)) for (fen_src, fen_dest) in liste_fenetres: if fen_src.selected: fen_src.selected = False fen_dest.selected = True break else: liste_fenetres[0][0].selected = True elif k == b'H': # Fleche Haut if self.current_player.current_fenetre: temp_selected = self.current_player.current_fenetre.ligne_selected - 1 if temp_selected < 0: self.current_player.current_fenetre.ligne_selected = len( self.current_player.current_fenetre.liste) - 1 else: self.current_player.current_fenetre.ligne_selected = temp_selected elif k == b'P': # Fleche Bas if self.current_player.current_fenetre: self.current_player.current_fenetre.ligne_selected += 1 if self.current_player.current_fenetre.ligne_selected >= len( self.current_player.current_fenetre.liste): self.current_player.current_fenetre.ligne_selected = 0 elif k == b'I': # Fleche Page Up self.player_id -= 1 if self.player_id < 0: self.player_id = self.max_players - 1 self.current_player = self.players[self.player_id] elif k == b'Q': # Fleche Page Down self.player_id += 1 if self.player_id > self.max_players - 1: self.player_id = 0 self.current_player = self.players[self.player_id] else: special = False if k == b'\x1b': # Touche Echap if self.current_player.caracteristiques.selected: self.current_player.caracteristiques.selected = False k = None if self.current_player.resistances.selected: self.current_player.resistances.selected = False k = None if self.current_player.equipement.selected: self.current_player.equipement.selected = False k = None elif k == b'\r': # Touche Entrée if self.current_player.current_fenetre: if self.current_player.current_fenetre.titre == "Equipement": self.gestion_inventaire() elif k == b'+': # Touche '+' if self.current_player.current_fenetre: if hasattr(self.current_player.current_fenetre, "points"): if self.current_player.current_fenetre.points > 0: self.current_player.current_fenetre.points -= 1 self.current_player.current_fenetre.current_element += 1 elif k == b'-': # Touche '-' if self.current_player.current_fenetre: if hasattr(self.current_player.current_fenetre, "points"): if self.current_player.current_fenetre.current_element > 1: self.current_player.current_fenetre.points += 1 self.current_player.current_fenetre.current_element -= 1
def menu(self): k = None special = False while k != b'\x1b': setColor(colors.fcolors.ENDC) setColor(colors.bcolors.NOIR) os.system("cls") couleur_fond = colors.bcolors.BLEU posX, posY = 30, 10 # │┤ ╣║ ╗╝ ┐└ ┴ ┬├ ─ ┼ ╚ ╔╩ ╦ ╠ ═ ╬ ┘┌ █ ▄ setColor(couleur_fond) printXY(posX + 40, posY, "┐") printXY(posX, posY, "─" * 16, " Menu ", "─" * 16) printXY(posX - 1, posY, "┌") posY += 1 for ligne in range(10): printXY(posX - 1, posY + ligne, "│" + " " * 40 + "│") posY += 1 printXY(posX + 5, posY, "F1 ", "Gestion des joueurs") posY += 7 printXY(posX + 5, posY, "Esc ", "Sortie") posY += 2 printXY(posX + 40, posY, "┘") printXY(posX, posY, "─" * 40) printXY(posX - 1, posY, "└") if k: printXY(5, 40, "Key:", k) if special: printXY(5, 41, "Special") print(end="", flush=True) k = getch() if k == b'\x00': k = getch() special = True if k == b';': # Touche F1 self.gestion_joueurs() elif k == b'<': # Touche F2 pass elif k == b'=': # Touche F3 pass elif k == b'>': # Touche F4 pass else: printXY(5, 42, "Key:", k) special = False
def imprime(self): setColor(colors.bcolors.NOIR) print(" . ", flush=True) os.system("cls") printXY(2, 2, "Nom :", self.nom) printXY(3, 3, "Niveau :", self.niveau) classes = {} for classe in self.classes: classes[classe] = 1 + classes.get(classe, 0) classe_str = "" for classe in classes: classe_str += f"{CLASSE.libelle[classe]} ({classes[classe]}), " printXY(3, 4, "Classe :", classe_str[:-2]) printXY(33, 3, "Race :", RACE.get_valof_from(self.race, "libelle")) # RACE.libelle[self.race]) printXY(60, 3, "Vie :", "{:4} / {:4}".format(*self.PV)) printXY(90, 3, "Mana :", "{:4} / {:4}".format(*self.PM)) printXY(3, 19, "Nombre de dons :", self.nombre_dons) printXY(3, 20, "Nombre de compétences :", self.nombre_competences) self.caracteristiques.printScreen(5, 6) self.resistances.printScreen(38, 6) self.equipement.printScreen(67, 6) self.equipement.print_caracteristiques()
def print_caracteristiques(self): if self.selected: objet = self.current_element if objet != None: posY = self.posY + len(self.liste) + 5 couleur_fond = colors.bcolors.BLEU printXY(self.posX, posY - 2, objet.nom) coinHD = "┐" coinBD = "┘" # Resistances if objet.resistances.nombre: decalX = 29 setColor(colors.fcolors.GVERT + couleur_fond) printXY(self.posX - 2 + decalX, posY - 1, "┌", end="") titre = "{} {} {}".format("═" * 6, "Résistances", "═" * 6) print(titre, end="┐") setColor(colors.fcolors.ENDC + couleur_fond) nombre = 0 for idx, res in enumerate(objet.resistances.liste): valeur = objet.resistances.liste[res] if valeur > 0: printXY(self.posX + decalX, posY + nombre, "{:12} : {:4} ".format(res, valeur)) nombre += 1 setColor(colors.fcolors.GVERT + couleur_fond) printXY(self.posX - 2 + decalX, posY + nombre, "└", end="") print("─" * len(titre), end="┘") # Caracteristiques if objet.caracteristiques.nombre: if objet.resistances.nombre: coinHD = "┬" if objet.caracteristiques.nombre == objet.resistances.nombre: coinBD = "┴" setColor(colors.fcolors.GVERT + couleur_fond) printXY(self.posX - 2, posY - 1, "┌", end="") titre = "{} {} {}".format("═" * 5, "Caracteristiques", "═" * 5) print(titre, end=coinHD) setColor(colors.fcolors.ENDC + couleur_fond) nombre = 0 for idx, a in enumerate(objet.caracteristiques.liste): valeur = objet.caracteristiques.liste[a] if valeur > 0: printXY(self.posX, posY + nombre, "{:12} : {:4} ".format(a, valeur)) nombre += 1 setColor(colors.fcolors.GVERT + couleur_fond) printXY(self.posX - 2, posY + nombre, "└", end="") print("─" * len(titre), end=coinBD) setColor(colors.fcolors.ENDC)