Ferfoui / CMD-squad

La repository de la Casa Mojo Dojo squad
2 stars 0 forks source link

Implémenter des menus (start menu + pause menu + death menu) #14

Open ynjiprod opened 10 months ago

ynjiprod commented 10 months ago

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)

Ferfoui commented 9 months ago

J'ai ajouté une classe qui permet de créer les menus

# 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)
Ferfoui commented 9 months ago

L'écran de mort a été ajouté, il reste plus qu'à faire le menu pause