Esempio n. 1
0
    def handle_userevent(self, event):      #Gère l'usage de porte -> charge nouvelle map et déplace personnage
        if event.name == EVENT_TP: # un nouveau rect pour le perso, une nouvelle map pour le Stage
            actor = event.actor
            actor.rect.x = int(event.spawn_pos.x)
            actor.rect.y = int(event.spawn_pos.y)
            actor.heal(10)

            self.unload_gui_and_player()
            self.map.save_in_game()
            self.map.destroy()

            self.map = Map.load_save(event.map_name)
            
            self.music_init(event.map_name)
            
            self.map.add_actor(event.actor)
            

            self.load_gui_and_player()  #soit on enlève celui-ci, soit celui du load_gui_and_player()
        
        elif event.name == EVENT_GAME_OVER:
            StageManager().push(StageGameOver())
            self.state = StageState.QUIT
            
        elif event.name == EVENT_WIN:
            StageManager().push(StageWin())
            self.state = StageState.QUIT
Esempio n. 2
0
    def init(self):
        #ajout des différents acteurs ( bouttons ( dans l'ordre ) et fond d'écran)
        
        self.map.add_actor(ActorBackgroundMenu())
        if StageManager().music_state and not pygame.mixer.music.get_busy():
            pygame.mixer.music.load("music/Beginning.ogg")
            pygame.mixer.music.play()

        self.map.add_actor(ActorButtonStart())
        self.map.add_actor(ActorButtonEdit())
        self.map.add_actor(ActorButtonSetting())
        self.map.add_actor(ActorButtonQuit())

        
        # répartis les bouttons au centre de l'écran
        
        height = self.screen.get_height() / (len(self.map.actors) + 3)      

        for index, button in enumerate(self.map.actors):
            if isinstance(button, ActorButton):                         #pour ne pas centrer le fond d'écran au centre de l'écran
                
                button.set_centered_x(self.screen.get_width())          #on centre en x
                button.rect.y = (index + 1) * height                    #et on répartit en y
            else:
                pass
Esempio n. 3
0
    def __init__(self, map="level_0"):
        """la base : initialise les trucs classiques de StageHandleConsole, ajoute une map, cherche le spwanpoint et crée le player dessus"""
        super().__init__()
        for loop in range(5):
            try:
                os.remove("saves/level_{0}.map".format(str(loop)))
            except:
                pass
        
        if StageManager().music_state:
            
            self.music_init()


        self.map = Map.load_save(map)                   #chargement de la map
        spawnpoint = self.map.get_actor(ActorSpawnpoint) #et de l'acteur
        if spawnpoint is not None:                      # gère l'existance de spawnpoint
            self.player = ActorPlayer()
            self.player.rect.topleft = spawnpoint.rect.topleft
            self.map.add_actor(self.player)
        else:
            raise NotImplementedError("Erreur la map n'a pas de spawnpoint!")

        # Ensuite ajout de la barre de vie

        self.gui_lifebar = ActorGUIBar(ratio=self.player.hp_max / self.player.hp, color=(255, 0, 0, 255))
        self.gui_lifebar.rect.x = 24
        self.gui_lifebar.rect.y = 24
        self.map.add_actor(self.gui_lifebar)
Esempio n. 4
0
 def fct_suffixe(
     self
 ):  #On cherche si la musique est on ou off afin de choisir le bon boutton
     if StageManager().music_state:
         self.suffixe = "ON"
     else:
         self.suffixe = "OFF"
Esempio n. 5
0
    def handle_keydown(self, unicode, key,
                       mod):  #gère l'évènement 'c' : lance la console
        super().handle_keydown(unicode, key, mod)

        if unicode == 'c':
            self.state = StageState.PAUSE
            StageManager().push(StageConsole(self))
Esempio n. 6
0
    def execute(self, command):
        """ Gère les entrées dans l'invite de commande"""

        commands = command.split(
            sep=" "
        )  # sépare l'entrée en une liste ( escpaces supprimés, remplacés par les ',' de la liste)

        if commands[0] == "debug":
            pass
        elif commands[0] == "hitbox":
            self.draw_hit_box = not self.draw_hit_box
        elif commands[0] == "print":
            print(self.__getattribute__(commands[1]))
            print(
                self.__getattribute__(commands[1]).__getattribute__(
                    commands[2]))
        elif commands[0] == "menu" or commands[
                0] == "quit":  #permet de revenir au menu via l'invite de commande
            if pygame.mixer.music.get_busy():
                pygame.mixer.music.stop(
                )  # On éteint la music pour permettre à celle du menu de se lancer (car vérifie si une musique est
            self.state = StageState.QUIT  # en trainde jouer ou non)
            StageManager().push(game.stages.StageMainMenu.StageMainMenu())
        elif commands[0] == "tp":
            event = pygame.event.Event(pygame.USEREVENT,
                                       name=EVENT_TP,
                                       map_name=commands[1],
                                       spawn_pos=Vector(700, 700),
                                       actor=self.map.get_actor(ActorPlayer))
            pygame.event.post(event)
        elif commands[0] == "invincible":
            self.map.get_actor(ActorPlayer).invicible = not self.map.get_actor(
                ActorPlayer).invicible
Esempio n. 7
0
    def pause(self):
        super().pause()

        stage = StageManager().stack[-1]
        if isinstance(stage, StageTileSelector):
            self.object_pick = stage.tile_picked
            if self.object_pick is not None:
                self.state = StageState.RESUME
Esempio n. 8
0
    def __init__(self):
        super().__init__(
            WINDOW_WIDTH, WINDOW_HEIGHT, framerate=60,
            fullscreen=False)  # Appel de l'initialisation de Game -> du jeu

        StageManager().push(
            StageLoadingScreen()
        )  # on lance la scène de chargement - > première scène, sinon le jeu se fermerait (tout simplement )
Esempio n. 9
0
 def sprite(self, sprite):  # pour lier l'acteur et l'image
     if not isinstance(sprite, pygame.Surface):
         self.log("Le Sprite n'est pas valide!", LOG_LEVEL.ERROR)
         StageManager().exit()
     else:
         self.rect.width = sprite.get_width()
         self.rect.height = sprite.get_height()
         self._sprite = sprite
Esempio n. 10
0
    def music_init(self, map_name = "default"):
        if not StageManager().music_state:
            return None
        

        if map_name in MUSIC_MAP.keys():
            pygame.mixer.music.load(MUSIC_MAP[map_name])
            pygame.mixer.music.play()
Esempio n. 11
0
    def execute(
        self
    ):  # On inverse la constante lorsque le boutton est activé (certes dans ce cas ce n'est plus une constante, mais bon...)
        super().execute()

        StageManager().music_state = not StageManager().music_state

        if not StageManager().music_state:
            pygame.mixer.music.stop()
        else:
            pygame.mixer.music.play()

        self.__init__()  # On change de boutton - > On vers OFF, ou inverse

        height = WINDOW_HEIGHT / 7

        self.set_centered_x(WINDOW_WIDTH)  # Il faut recentrer le boutton

        self.rect.y = (3) * height
Esempio n. 12
0
    def __init__(self):
        super().__init__()

        self.map.add_actor(ActorBackgroundWin())

        if StageManager().music_state:
            pygame.mixer.music.load(MUSIC_WIN)
            pygame.mixer.music.play()

        self.map.add_actor(ActorCredits())
        self.alpha = 0
        self.map.actors[1].sprite.set_alpha(self.alpha)
        self.add_timer(Timer(56, self.fade_in_image, True, 63))
Esempio n. 13
0
    def __init__(
        self,
        width=640,
        height=480,
        log_level=LOG_LEVEL.INFO,
        framerate=120,
        fullscreen=False
    ):  # Initialisation du jeu, On initialise pygame, on crée l'écran
        pygame.init()
        pygame.mixer.init()

        if fullscreen:
            flags = pygame.FULLSCREEN
        else:
            flags = pygame.NOFRAME

        self.stage_manager = StageManager()
        # assert not pygame.display.mode_ok((width, height), flags)
        self.screen = pygame.display.set_mode((width, height), flags)

        self.framerate = framerate
        self.clock = pygame.time.Clock(
        )  #Création d'un système temporel -> pour géré certains trucs selon temps ( ex : vitesse )
        Logger.set_log_level(log_level)
Esempio n. 14
0
 def draw(self, screen):  # Dessine l'image
     if not isinstance(self.sprite, pygame.Surface):
         self.log("Le Sprite n'est pas valide!", LOG_LEVEL.ERROR)
         StageManager().exit()
     else:
         try:
             if self.draw_shadow:
                 rect = copy.deepcopy(self.rect)
                 rect.y += self.h
                 screen.blit(shadowizer(self.sprite), rect.pyrect)
             screen.blit(self.sprite, self.rect.pyrect)
         except:
             self.load_sprite()
             self.info("Rechargement des images car Pickle.")
             screen.blit(self.sprite, self._rect.pyrect)
Esempio n. 15
0
    def start(self):
        """Called when you want the game to start -> unless you're using multi-threading, you won't be able to do
        anything until your game ends """
        """ Jeu fonctionne selon succesion de Stages ( comme un pièce de théâtre ) -> toutes les scènes se déroulent ici: StageManager gère le nombre de scènes en cours
        la boucle qui suit active seulement les scènes selon leurs état ( StageState ) """

        if self.screen == None:
            self.error("Ecran non defini", LOG_LEVEL.ERROR)
            StageManager().exit()

        while not self.stage_manager.is_empty:
            self.clock.tick(self.framerate)
            self.screen.fill(
                (0, 0, 0)
            )  #écran est noir, on colle ensuite le stage et les images des acteurs par dessus

            for index, stage in enumerate(
                    self.stage_manager
            ):  # Appelle fct correspondant à ce que le Stage doit faire selon son état ( quit() par exemple ne fait généralement rien)
                type(self).CURRENT_STAGE = stage
                if stage.state == StageState.RUN:
                    stage.run()
                elif stage.state == StageState.PAUSE:
                    stage.pause()
                elif stage.state == StageState.RESUME:
                    stage.state = StageState.RUN
                    stage.resume()
                elif stage.state == StageState.INIT:
                    stage.state = StageState.RUN
                    stage.init()
                elif stage.state == StageState.QUIT:
                    self.stage_manager.pop(index)
                    stage.quit()
            pygame.display.update()

        pygame.mixer.quit()  # Plus de 'zic
        pygame.quit()  # le jeu est fini :)
        print("Done")
Esempio n. 16
0
 def execute(self):
     StageManager().push(
         game.stages.StagePlayerGenerator.StagePlayerGenerator())
Esempio n. 17
0
class Game(Logger):
    """Les bases de la logique du jeu... Si on veut modifier quelque chose qui touche tout le jeu, on le fait ici"""

    CURRENT_STAGE = None

    def __init__(
        self,
        width=640,
        height=480,
        log_level=LOG_LEVEL.INFO,
        framerate=120,
        fullscreen=False
    ):  # Initialisation du jeu, On initialise pygame, on crée l'écran
        pygame.init()
        pygame.mixer.init()

        if fullscreen:
            flags = pygame.FULLSCREEN
        else:
            flags = pygame.NOFRAME

        self.stage_manager = StageManager()
        # assert not pygame.display.mode_ok((width, height), flags)
        self.screen = pygame.display.set_mode((width, height), flags)

        self.framerate = framerate
        self.clock = pygame.time.Clock(
        )  #Création d'un système temporel -> pour géré certains trucs selon temps ( ex : vitesse )
        Logger.set_log_level(log_level)

    def start(self):
        """Called when you want the game to start -> unless you're using multi-threading, you won't be able to do
        anything until your game ends """
        """ Jeu fonctionne selon succesion de Stages ( comme un pièce de théâtre ) -> toutes les scènes se déroulent ici: StageManager gère le nombre de scènes en cours
        la boucle qui suit active seulement les scènes selon leurs état ( StageState ) """

        if self.screen == None:
            self.error("Ecran non defini", LOG_LEVEL.ERROR)
            StageManager().exit()

        while not self.stage_manager.is_empty:
            self.clock.tick(self.framerate)
            self.screen.fill(
                (0, 0, 0)
            )  #écran est noir, on colle ensuite le stage et les images des acteurs par dessus

            for index, stage in enumerate(
                    self.stage_manager
            ):  # Appelle fct correspondant à ce que le Stage doit faire selon son état ( quit() par exemple ne fait généralement rien)
                type(self).CURRENT_STAGE = stage
                if stage.state == StageState.RUN:
                    stage.run()
                elif stage.state == StageState.PAUSE:
                    stage.pause()
                elif stage.state == StageState.RESUME:
                    stage.state = StageState.RUN
                    stage.resume()
                elif stage.state == StageState.INIT:
                    stage.state = StageState.RUN
                    stage.init()
                elif stage.state == StageState.QUIT:
                    self.stage_manager.pop(index)
                    stage.quit()
            pygame.display.update()

        pygame.mixer.quit()  # Plus de 'zic
        pygame.quit()  # le jeu est fini :)
        print("Done")
 def save_and_go(self, filename):
     self.save(filename)
     self.state = StageState.QUIT
     StageManager().push(game.stages.StageLevel.StageLevel())
Esempio n. 19
0
 def execute(self):
     StageManager().push(StageMenuSetting())
Esempio n. 20
0
 def execute(self):
     StageManager().push(StageEditMode())
Esempio n. 21
0
    def execute(
        self, command
    ):  # récupère la commande fournie par StageCommand, agit selon celle-ci
        super().execute(command)

        commands = command.lower().split(sep=" ")
        bug = False

        if commands[0] == "map":
            if commands[1] == "load":
                self.map = Map.load_editor(commands[2])  #pour charger une map
            elif commands[1] == "save":
                self.map.save()
            elif commands[1] == "print":  #pour sauvegarder la map
                self.map.info("Je suis : " + self.map.name)
            elif commands[1] == "type":
                if commands[2] == "print":
                    self.info(self.map.type)
                elif commands[2] == "set":
                    self.map.type = commands[3]
                else:
                    bug = True
            else:
                bug = True
        elif commands[0] == "pick":  # pour prendre et poser des acteurs
            try:
                id = int(commands[1])
            except:
                id = commands[1]

            if isinstance(
                    id, type("")
            ):  # pour obtenir l'acteur, d'abord selon son nom ( test str ) , ensuite selon son id ( int )
                class_name = Register().get_actor_by_name(id)
            else:
                class_name = Register().get_actor(id)
            if class_name is not None:
                self.object_pick = class_name(*commands[2:])
                #self.object_pick.should_update = False            #Ne sais pas l'utilité : mais est cause bug : empêche player de bouger dans editeur
            else:
                self.object_pick = None
        elif commands[0] == "pause":  #pour mettre en pause
            self.is_paused = True
        elif commands[0] == "resume":  #voilà...
            self.is_paused = False
        elif commands[0] == "mode":  #changer le mode actuel
            if commands[1] == "get":
                self.info(self.mode)
            elif commands[1] == "set":
                if commands[2] == "pick":  #permet de poser acteurs
                    self.mode = EDIT_MODE.PICK
                elif commands[2] == "move":  #permet de déplacer un acteur
                    self.mode = EDIT_MODE.MOVE
                elif commands[2] == "remove":  #__________enlever___________
                    self.mode = EDIT_MODE.REMOVE
                elif commands[
                        2] == "layer":  #changer la hauteur d'un acteur ( + ou - selon le côté où l'on clic )
                    self.mode = EDIT_MODE.LAYER
                elif commands[
                        2] == "copy":  # de copier l'acteur en question ( avec la hauteur et tt)
                    self.mode = EDIT_MODE.COPY
                else:
                    bug = True
            else:
                bug = True
        elif commands[
                0] == "grid":  # pour créer une grille -> Posage d'acteur plus précis
            if commands[1] == "turn":
                if commands[
                        2] == "on":  # voili voulou, allumer, éteindre, rien de nouveau sous le soleil
                    self.grid.should_draw = True
                elif commands[2] == "off":
                    self.grid.should_draw = False
                else:
                    bug = True
            elif commands[1] == "set":
                try:
                    if commands[3] == "":
                        self.grid.set_size(int(commands[2]), int(commands[2]))
                    else:  #Afin de donner largeur et hauteur des rectangles de la grille
                        self.grid.set_size(int(commands[2]), int(commands[3]))
                except:
                    bug = True

            elif commands[1] == "origin":
                if commands[2] == "" or commands[3] == "":
                    self.grid.set_origin(
                        0, 0)  #On détermine l'origine de la grille
                else:
                    self.grid.set_origin(int(commands[2]), int(commands[3]))
            else:
                bug = False

        elif commands[0] == "actor":
            if commands[1] != "":
                self.object_pick = ActorSimpleLife(
                    commands[1]
                )  #permet de prendre un acteur particulier parmis les images de assets (au-dessus de tout)
            else:
                bug = True
        elif commands[
                0] == "tilesets":  #lance le stage tilesets, pour avoir une image/acteur
            self.state = StageState.PAUSE
            StageManager().push(StageTileSelector())
        elif commands[0] == "generator":
            self.state = StageState.QUIT
            StageManager().push(StagePlayerGenerator())
        else:
            bug = True

        if bug:
            print("\"", command, "\"", " est une commande inconnue", sep="")
Esempio n. 22
0
    def execute(self):
        super().execute()

        StageManager().push(game.stages.StageMainMenu.StageMainMenu())
Esempio n. 23
0
 def quit(self):
     StageManager().stack[-1].state = StageState.RESUME
Esempio n. 24
0
 def handle_keydown(self, unicode, key, mod):
     pygame.mixer.music.stop()
     StageManager().push(StageMainMenu())
     self.state = StageState.QUIT
    def execute(self):
        super().execute()

        pygame.mixer.music.stop()
        StageManager().push(game.stages.StageMainMenu.StageMainMenu())
    def execute(self):
        super().execute()

        StageManager().exit()
Esempio n. 27
0
 def execute(self):
     StageManager().exit()
Esempio n. 28
0
 def quit(self):
     StageManager().push(StageMainMenu())