Open ynjiprod opened 10 months ago
# Classe qui gère les menus
class Menu():
def __init__(self, background_color: ColorValue):
"""Initialise un Menu
Args:
background_color (ColorValue): couleur de l'arrière-plan
"""
self.background_color = background_color
self.images_to_draw = []
self.buttons_to_draw = {}
def add_image(self, image: pygame.Surface, x: int, y: int, do_place_center: bool):
img_rect = image.get_rect()
if do_place_center:
img_rect.center = (x, y)
else:
img_rect.topleft = (x, y)
self.images_to_draw.append((image, img_rect))
def add_text_button(self, button_name: str, text_to_draw: str, font: pygame.font.Font, text_col: ColorValue, x: int, y: int, scale, do_place_center: bool):
"""Ajoute un bouton sous forme de texte au menu
Args:
button_name (str): nom du bouton
text_to_draw (str): texte à afficher
font (pygame.font.Font): police d'écriture
text_col (ColorValue): couleur
x (int): position en abscisses où le bouton va être créé
y (int): position en ordonnées où le bouton va être créé
scale (int or float): nombre par lequel le bouton va être redimensionné
do_place_center (bool): si les coordonnées données sont celles du centre du texte
"""
text_img = font.render(text_to_draw, True, text_col)
button = Button(x, y, text_img, text_img, scale, do_place_center)
self.buttons_to_draw[button_name] = button
def draw(self, screen: pygame.Surface, do_draw_background: bool) -> list[str]:
"""Affiche les images et les boutons à l'écran et renvoie les noms des boutons qui ont été cliqués
Args:
screen (pygame.Surface): écran sur lequel le menu doit s'afficher
do_draw_background (bool): si la couleur d'arrière-plan doit être affichée
Returns:
list[str]: noms des boutons qui ont été cliqués
"""
if do_draw_background:
screen.fill(self.background_color)
for image, img_rect in self.images_to_draw:
screen.blit(image, img_rect)
clicked_buttons = []
for button_name, button in self.buttons_to_draw.items():
if button.draw(screen):
clicked_buttons.append(button_name)
return clicked_buttons
et une classe pour créer le menu de démarrage :
# Classe du menu de démarrage
class StartMenu(utils.Menu):
def __init__(self, assets: utils.Assets):
"""Initialise le menu de démarrage
Args:
assets (Assets): classe qui contient les assets
"""
super().__init__(COLOR_WHITE_AZURE)
# Ajoute l'image au milieu de l'écran
self.add_image(assets.cmd_img, SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2, True)
# Ajoute le bouton de démarrage
self.add_text_button("start", "PRESS ENTER TO START :)", assets.default_font, COLOR_HOT_PINK, SCREEN_WIDTH//2, SCREEN_HEIGHT*0.96, 1, True)
Menu -Bouton pour commencer le jeu -Bouton amenant au menu des paramètres -Ajouter les paramètres réglables (difficulté, niveau du son, taille de la police, luminosité, résolution, fps max, sauvegarde, checkpoint activable, changement des keybinds)