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.

174 lines
6.8 KiB

from graphics.colors import Colors
from graphics.engine import Layer
from graphics.engine import Screen
from getkey import keys
from re import match
class GUI(Layer):
"""Calque du menu principal"""
def __init__(self, z_index):
super().__init__(z_index, "gui")
self.__current = 0
self.__buttons = ["Attaquer", "Inventaire"]
self.__inventaire = False
self.handle_keys = False
self.__page = 1
def draw(self):
super().draw()
if self.__inventaire == False:
x = 1
for button in self.__buttons:
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
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
for button in self.__buttons:
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
self.put_string("Votre inventaire:", 1, self.y-8, [Colors.RED2])
stats = Screen.instance.game.personnage.affiche_inventaire()
for i in range(len(stats)):
self.put_string(stats[i], 1, self.y-7+i, [Colors.RED2])
return self
def key_handler(self, key):
if key == keys.RIGHT and self.__current < len(self.__buttons)-1:
self.__current += 1
elif key == keys.LEFT and self.__current > 0:
self.__current -= 1
elif key == keys.ENTER:
if self.__inventaire == False:
if self.__current == 0:
attacker = Screen.instance.game.personnage
victim = Screen.instance.game.ennemy
Screen.instance.game.attack(attacker, victim)
elif self.__current == 1:
self.__inventaire = True
self.__buttons = ["Retour", "Utiliser une potion"]
else:
if self.__current == 0:
self.__inventaire = False
self.__buttons = ["Attaquer", "Inventaire"]
elif self.__current == 1:
perso = Screen.instance.game.personnage
inv = perso.inventaire
if inv.has("POTION"):
perso.change_pdv(-10)
inv.remove(inv.pop_potion())
class StartPopUp(Layer):
"""Calque du menu de lancement"""
def __init__(self, z_index):
super().__init__(z_index, "popup")
self.__classes = ["Guerrier", "Magicien", "Voleur", "Elfe"]
self.__choosen_class = 0
self.__username = ""
self.__missing_un = False
def draw(self):
super().draw()
#bg
self.rect(self.x//3, self.y//6, self.x*2//3, self.y//4 + self.y//3, Colors.WHITEBG)
#name
self.put_string("Nom: (A-z)", self.x//3 + 1, self.y//6 + 1, [Colors.WHITEBG, Colors.BLACK])
self.rect(self.x//3 + 1, self.y//6 + 2, self.x*2//3 - 2, self.y//6 + 2, Colors.REDBG if self.__missing_un else Colors.BLACKBG)
self.put_string(self.__username, self.x//3 + 1, self.y//6 + 2, [Colors.WHITE, Colors.BLACKBG])
#Classes
self.put_string("Classe perso.: (Flèches)", self.x//3 + 1, self.y//6 + 4, [Colors.WHITEBG, Colors.BLACK])
y = 0
for user_class in self.__classes:
colors = [Colors.REDBG, Colors.BLACK] if y == self.__choosen_class else [Colors.GREYBG, Colors.WHITE]
self.put_string(user_class, self.x//3 + 2, self.y//6 + 5 + y, colors)
y += 1
self.put_string("TAB pour confirmer", self.x//3 + 1, self.y//4 + self.y//3 -1, [Colors.WHITEBG, Colors.BLACK])
return self
def key_handler(self, key):
if match("[a-zA-Z]", key):
self.__username += key
elif key == keys.BACKSPACE:
self.__username = self.__username[:-1]
elif key == keys.UP and self.__choosen_class > 0:
self.__choosen_class -= 1
elif key == keys.DOWN and self.__choosen_class < 3:
self.__choosen_class += 1
elif key == keys.TAB:
if len(self.__username) == 0:
self.__missing_un = True
return
Screen.instance.get_layer("gui").handle_keys = True
Screen.instance.del_layer("popup")
Screen.instance.game.init_personnage(self.__username, self.__classes[self.__choosen_class])
class PopUp(Layer):
"""Calque du menu de lancement"""
def __init__(self, z_index, message, block=False):
super().__init__(z_index, "popup")
self.message = message
self.block = block
Screen.instance.get_layer("gui").handle_keys = False
def draw(self):
super().draw()
self.rect(self.x//3, self.y//6, self.x*2//3, self.y//4 + self.y//3, Colors.WHITEBG)
length = (self.x*2//3-1) - (self.x//3+1)
x = 0
y = 0
for char in self.message:
if char == "\n":
x = 0
y += 1
continue
self.put_char(char, self.x//3 + 1 + x, self.y//6 + 1 + y, [Colors.WHITEBG, Colors.BLACK])
x += 1
if x == length:
x = 0
y += 1
if not self.block:
self.put_string("TAB pour confirmer", self.x//3 + 1, self.y//4 + self.y//3 -1, [Colors.WHITEBG, Colors.BLACK])
return self
def key_handler(self, key):
if key == keys.TAB and not self.block:
Screen.instance.get_layer("gui").handle_keys = True
Screen.instance.del_layer("popup")
class Sprite(Layer):
def __init__(self, z_index, sprite_name, personnage_type):
super().__init__(z_index, personnage_type)
self.personnage_type = personnage_type
self.sprite_name = sprite_name
def draw(self):
super().draw()
with open(f"game/sprites/{self.sprite_name}.txt", "r") as sprite:
pos = (1, 1) if self.personnage_type == "PLAYER" else (Screen.instance.x*2//3+1, 1)
self.put_string(sprite.read(), *pos)
def key_handler(self, key):
pass