Example #1
0
def main():
    pygame.init()  #init pygame

    # Set the resolution
    size = [Classes.constants.SCREEN_WIDTH, Classes.constants.SCREEN_HEIGHT]
    screen = pygame.display.set_mode(size)

    pygame.display.set_caption("Galactik Hold Up")

    #init player
    player = Player()

    #boolean for the program loop
    done = False

    #boolean if music is enable or not
    isMusic = True

    #entry field for enter the pseudo
    inputBox = InputBox(500, 540, 310, 60)

    #game clock
    clock = pygame.time.Clock()
    pygame.time.set_timer(pygame.USEREVENT, 1000)
    font = pygame.font.SysFont('Impact', 40)

    #launch the menu music
    launchMusic("Musiques/menu_music.wav")

    #Game Loop
    while not done:

        #time counter of the game set on 3 minutes
        counter, text = 180, '180'.rjust(3)

        #load and put on the screen the accueil ressources
        accueil = pygame.image.load("Images/accueil.jpg").convert()
        screen.blit(accueil, (0, 0))
        #load the music icon
        if isMusic:
            sound = pygame.image.load("Images/soundon.png").convert_alpha()
        else:
            sound = pygame.image.load("Images/soundoff.png").convert_alpha()

        #put the music icon on the screen
        screen.blit(sound, (30, 30))

        #display the screen
        pygame.display.flip()

        #loop variables
        continuer_accueil = 1
        continuer_jeu = 0
        continuer_classement = 0
        continuer_credits = 0
        continuer_score = 0

        #accueil loop
        while continuer_accueil:
            player.score = 0
            player.multiplicateur = 1

            for event in pygame.event.get():  #check every event

                #Quit event
                if event.type == pygame.QUIT or event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
                    continuer_accueil = 0
                    continuer_jeu = 0
                    done = True
                    choix = 0

                #keyboard event
                elif event.type == pygame.KEYDOWN:
                    #F1 for launch the tuto
                    if event.key == pygame.K_F1:
                        continuer_accueil = 0
                        continuer_jeu = 1
                        choix = "tuto"
                        if isMusic:
                            launchMusic("Musiques/Level_music.wav"
                                        )  #launch the level music

                    #F2 for launch the game
                    elif event.key == pygame.K_F2:
                        continuer_accueil = 0
                        continuer_jeu = 1
                        choix = "ramdom"
                        if isMusic:
                            launchMusic("Musiques/Level_music.wav")

                    #F3 for launch the classement
                    elif event.key == pygame.K_F3:
                        continuer_accueil = 0
                        continuer_classement = 1
                        choix = "classement"

                    #F4 for launch the credits
                    elif event.key == pygame.K_F4:
                        continuer_accueil = 0
                        continuer_credits = 1
                        choix = "credits"

                #for disable/enable the music click on the music icon
                elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1 and event.pos[
                        1] < 94 and event.pos[1] > 30 and event.pos[
                            0] < 94 and event.pos[0] > 30:
                    if isMusic:
                        pygame.mixer.music.pause()
                        sound = pygame.image.load(
                            "Images/soundoff.png").convert_alpha()
                    else:
                        pygame.mixer.music.play(-1)
                        sound = pygame.image.load(
                            "Images/soundon.png").convert_alpha()
                    isMusic = not isMusic  #change the boolean for music
                    #refreh the display
                    screen.blit(accueil, (0, 0))
                    screen.blit(sound, (30, 30))
                    pygame.display.flip()

        if choix != 0:
            if choix == "tuto":  #load the tuto
                current_level = Classes.levels.Level_0(player)
                active_sprite_list = pygame.sprite.Group()
                generateLevel(player, current_level)
                active_sprite_list.add(player)

            elif choix == 'ramdom':  #launch the game
                #create a list containing all the level id
                list_no = []
                for i in range(1, Classes.constants.nbLevel + 1):
                    list_no.append(i)

                noLevel = createRandomNum(list_no)  #generate a random level id
                current_level = selectRandomLevel(
                    player, list_no, noLevel)  #select the random level
                active_sprite_list = pygame.sprite.Group(
                )  #create sprites list
                generateLevel(player, current_level)  #generate the level
                active_sprite_list.add(
                    player)  #add the player to the sprites list

            #load the classement
            elif choix == "classement":
                classement = generateClasssement()

            #load the credits
            elif choix == "credits":
                credits = pygame.image.load("Images/Credits.jpg").convert()
                screen.blit(credits, (0, 0))

        #classement loop
        while continuer_classement:
            for event in pygame.event.get():  #event management
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        continuer_classement = 0
                        continuer_accueil = 1
                if event.type == pygame.QUIT:
                    done = True
                    continuer_classement = 0

            printClassement(screen,
                            classement)  #put classement element on the screen
            pygame.display.flip()  #display the screen

        #credits loop
        while continuer_credits:
            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        continuer_credits = 0
                        continuer_accueil = 1
                if event.type == pygame.QUIT:
                    done = True
                    continuer_credits = 0
            pygame.display.flip()  #display credits

        #Game loop
        while continuer_jeu:

            #set variables for displaying score and multiplicateur
            score = "Score : " + format(player.score)
            multiplicateur = "Multiplicateur : x" + format(
                player.multiplicateur)

            for event in pygame.event.get():  #event management

                if event.type == pygame.USEREVENT:  #event for managingthe time and update it
                    if type(current_level
                            ) != Level_0:  #if we are not in the tuto level
                        counter -= 1
                        text = "Timer : " + str(counter).rjust(
                            3)  #variable for displaying lefting time
                        if counter == 15:  #put a minuteur sound when 15 seconds left
                            son = pygame.mixer.Sound("Musiques/minuteur.wav")
                            son.play()
                        elif counter <= 0:  #when the timer is over
                            son = pygame.mixer.Sound("Musiques/temps.wav")
                            son.play()
                            continuer_jeu = 0
                            choix = 0
                            continuer_score = 1

                elif event.type == pygame.QUIT:  # If user clicked close
                    done = True  # Flag that we are done so we exit this loop
                    continuer_jeu = 0

                elif event.type == pygame.KEYDOWN:  #keyboard event
                    if event.key == pygame.K_ESCAPE:  #return to the menu
                        continuer_jeu = 0
                        if isMusic:
                            launchMusic("Musiques/menu_music.wav")
                    elif event.key == pygame.K_LEFT:
                        player.go_left()
                    elif event.key == pygame.K_RIGHT:
                        player.go_right()
                    elif event.key == pygame.K_UP:
                        player.jump()

                #stop the player when the user don't move him
                if event.type == pygame.KEYUP:
                    if event.key == pygame.K_LEFT and player.change_x < 0:
                        player.stop()
                    if event.key == pygame.K_RIGHT and player.change_x > 0:
                        player.stop()

                #when the player take a spring
                if event.type == Classes.constants.SPRING:
                    player.springJump()

                #when the player cross a gravity portal
                if event.type == Classes.constants.ANTIGRAVITY:
                    player.changeGravity()

                #when the player die
                if event.type == Classes.constants.DEATH:
                    if (type(player.level) != Level_0):  #if it's not the tuto
                        #generate a new level
                        noLevel = createRandomNum(list_no)
                        current_level = selectRandomLevel(
                            player, list_no, noLevel)
                        player.pos = Classes.constants.levelStart_x
                        generateLevel(player, current_level)
                    else:  #if it's the tuto regenerate the tuto
                        generateLevel(player, current_level)

                #when the player take a boost
                if event.type == Classes.constants.BOOST:
                    player.go_boost()

                #when the player finish a level
                if event.type == Classes.constants.FINISH:
                    if (type(player.level) != Level_0):  #if it's not the tuto
                        list_no.remove(
                            noLevel)  #remove this level from level id list
                        #generate a new level
                        noLevel = createRandomNum(list_no)
                        current_level = selectRandomLevel(
                            player, list_no, noLevel)
                        player.pos = Classes.constants.levelStart_x
                        generateLevel(player, current_level)
                    else:  #if it's the tuto back to the menu
                        continuer_accueil = 1
                        continuer_jeu = 0
                        if isMusic:
                            launchMusic("Musiques/menu_music.wav")

            # Update the player.
            active_sprite_list.update()

            # Update items in the level
            current_level.update()

            # If the player gets near the right side, shift the world left (-x)
            if player.rect.x >= 500:
                diff = player.rect.x - 500
                player.rect.x = 500
                current_level.shift_world(-diff)

            # If the player gets near the left side, shift the world right (+x)
            if player.rect.x <= 120:
                diff = 120 - player.rect.x
                player.rect.x = 120
                current_level.shift_world(diff)

            #draw the modification on the screen
            current_level.draw(screen)
            active_sprite_list.draw(screen)
            clock.tick(60)  #the game run in 60FPS

            if type(
                    current_level
            ) != Level_0:  #if it's not the tuto update the game information(time, score and multiplicateur)
                screen.blit(font.render(text, True, (255, 255, 255)), (10, 0))
                screen.blit(font.render(score, True, (255, 255, 255)),
                            (380, 0))
                screen.blit(font.render(multiplicateur, True, (255, 255, 255)),
                            (720, 0))

            #display the screen
            pygame.display.flip()

        #score loop when the game is finish
        while continuer_score:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    done = True
                    continuer_score = 0
                    ajouterScore(
                        player, inputBox.text
                    )  #add the score and the pseudo in classement.txt

                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        continuer_score = 0
                        ajouterScore(player, inputBox.text)
                        if isMusic:
                            launchMusic("Musiques/menu_music.wav")

                elif event.type == Classes.constants.ENTER_PSEUDO:
                    continuer_score = 0
                    ajouterScore(player, inputBox.text)
                    if isMusic:
                        launchMusic("Musiques/menu_music.wav")

                inputBox.handle_event(event)  #manage event of the inputBox
            printScore(screen, player)  #put the score on the screen
            #update and draw the input box
            inputBox.update()
            inputBox.draw(screen)
            #display screen
            pygame.display.flip()
    pygame.quit()