|
|
@ -1,40 +1,37 @@ |
|
|
|
from game.personnage import Personnage, ClassType |
|
|
|
|
|
|
|
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): |
|
|
|
def __init__(self, screen, z_index, buttons): |
|
|
|
super().__init__(screen, z_index, "gui") |
|
|
|
"""Calque du menu principal""" |
|
|
|
def __init__(self, z_index, buttons): |
|
|
|
super().__init__(z_index, "gui") |
|
|
|
self.buttons = buttons |
|
|
|
self.current = 0 |
|
|
|
|
|
|
|
self.handle_keys = False |
|
|
|
#self.personnage = Personnage(" ", ClassType.GUERRIER) |
|
|
|
#self.ennemy = Personnage("Zombie", ClassType.ZOMBIE) |
|
|
|
|
|
|
|
def draw(self): |
|
|
|
super().draw() |
|
|
|
x = 1 |
|
|
|
for button in self.buttons: |
|
|
|
color = (Colors.WHITEBG, Colors.BLACK) |
|
|
|
if self.buttons[self.current] == button: |
|
|
|
color = (Colors.REDBG, Colors.BLACK) |
|
|
|
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 = self.screen.game.personnage.affiche_caracteristiques() |
|
|
|
stats = Screen.instance.game.personnage.affiche_caracteristiques() |
|
|
|
for i in range(4): |
|
|
|
self.put_string(stats[i], 0, self.y-8+i, [Colors.RED2]) |
|
|
|
for i in range(7): |
|
|
|
self.put_string(stats[i+4], 40, self.y-8+i, [Colors.RED2]) |
|
|
|
self.put_string(stats[i], 1, self.y-8+i, [Colors.RED2]) |
|
|
|
for i in range(6): |
|
|
|
self.put_string(stats[i+4], (self.x-2)//3, self.y-8+i, [Colors.RED2]) |
|
|
|
|
|
|
|
ennemy_stats = self.screen.game.ennemy.reduced_stats() |
|
|
|
ennemy_stats = Screen.instance.game.ennemy.reduced_stats() |
|
|
|
for i in range(3): |
|
|
|
self.put_string(ennemy_stats[i], 80, self.y-8+i, [Colors.BLUE2]) |
|
|
|
self.put_string(ennemy_stats[i], self.x-(self.x-2)//3, self.y-8+i, [Colors.BLUE2]) |
|
|
|
|
|
|
|
return self |
|
|
|
|
|
|
@ -44,33 +41,33 @@ class GUI(Layer): |
|
|
|
elif key == keys.LEFT and self.current > 0: |
|
|
|
self.current -= 1 |
|
|
|
elif key == keys.ENTER and self.current == 0: |
|
|
|
attacker = self.screen.game.personnage |
|
|
|
victim = self.screen.game.ennemy |
|
|
|
self.screen.game.attack(attacker, victim) |
|
|
|
attacker = Screen.instance.game.personnage |
|
|
|
victim = Screen.instance.game.ennemy |
|
|
|
Screen.instance.game.attack(attacker, victim) |
|
|
|
|
|
|
|
|
|
|
|
class StartPopUp(Layer): |
|
|
|
def __init__(self, screen, z_index): |
|
|
|
super().__init__(screen, z_index, "popup") |
|
|
|
self.__classes = ["GUERRIER", "MAGICIEN", "VOLEUR", "ELF"] |
|
|
|
"""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//3 + self.x//4, self.y//4 + self.y//3, Colors.WHITEBG) |
|
|
|
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//3 + self.x//4 - 1, self.y//6 + 2, Colors.BLACKBG) |
|
|
|
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.: SHIFT+[1-4]", self.x//3 + 1, self.y//6 + 4, [Colors.WHITEBG, Colors.BLACK]) |
|
|
|
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.GREYBG, Colors.WHITE] |
|
|
|
if y == self.__choosen_class: |
|
|
|
colors = [Colors.REDBG, Colors.BLACK] |
|
|
|
colors = 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 |
|
|
|
|
|
|
@ -83,10 +80,62 @@ class StartPopUp(Layer): |
|
|
|
self.__username += key |
|
|
|
elif key == keys.BACKSPACE: |
|
|
|
self.__username = self.__username[:-1] |
|
|
|
elif match("[1-4]", key): |
|
|
|
self.__choosen_class = int(key)-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: |
|
|
|
self.screen.get_layer("gui").handle_keys = True |
|
|
|
self.screen.del_layer("popup") |
|
|
|
self.screen.game.personnage = Personnage(self.__username, ClassType[self.__classes[self.__choosen_class]]) |
|
|
|
#self.screen.get_layer("gui").personnage = Personnage(self.__username, ClassType[self.__classes[self.__choosen_class]]) |
|
|
|
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: |
|
|
|
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, place): |
|
|
|
if place != "player" and place != "opponant": |
|
|
|
raise ValueError("wrong sprite name") |
|
|
|
super().__init__(z_index, place) |
|
|
|
self.place = place |
|
|
|
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.place == "player" else (Screen.instance.x*2//3+1, 1) |
|
|
|
self.put_string(sprite.read(), *pos) |
|
|
|
|
|
|
|
def key_handler(self, key): |
|
|
|
pass |