Partage
  • Partager sur Facebook
  • Partager sur Twitter

Projet Pygame

    24 janvier 2024 à 22:00:46

    bonjour, je dois faire un programme pygame pour faire un combat pokemon, mais le problème c'est que mes 4 image ne s'affiche pas pendant la séléction, seulement 1 des 4 d'affiche, quelqu'un pour m'aider ? voila le programme

    import pygame

    import sys

    import random

    # Initialisation de Pygame

    pygame.init()

    # Obtenir la taille de l'écran

    largeur, hauteur = pygame.display.Info().current_w, pygame.display.Info().current_h

    # Définir le chemin vers l'image de fond pour l'écran de sélection

    chemin_fond_selection = "fond_selection.jpg"  # Remplace avec le chemin de ton image de fond pour la sélection

    fond_selection_image = pygame.image.load(chemin_fond_selection)

    fond_selection_image = pygame.transform.scale(fond_selection_image, (largeur, hauteur))

    # Définir le chemin vers l'image de fond pour le combat

    chemin_fond_combat = "fond_combat.jpg"  # Remplace avec le chemin de ton image de fond pour le combat

    fond_combat_image = pygame.image.load(chemin_fond_combat)

    fond_combat_image = pygame.transform.scale(fond_combat_image, (largeur, hauteur))

    # Charger les images des Pokémon et des boutons

    pokemon_joueur_image = pygame.image.load("gandalf.png")

    bouton_attaque_image = pygame.image.load("attaque.png")

    quit_button_image = pygame.image.load("quitter.png")  # Remplace avec le chemin de ton image pour le bouton quitter

    victoire_image = pygame.image.load("victoire.png")

    defaite_image = pygame.image.load("defaite.png")

    # Réduire la taille des images

    nouvelle_taille_pokemon = (largeur // 6, hauteur // 3)

    nouvelle_taille_bouton = (nouvelle_taille_pokemon[0] // 2, nouvelle_taille_pokemon[1] // 2)

    pokemon_joueur_image = pygame.transform.scale(pokemon_joueur_image, nouvelle_taille_pokemon)

    bouton_attaque_image = pygame.transform.scale(bouton_attaque_image, nouvelle_taille_bouton)

    quit_button_image = pygame.transform.scale(quit_button_image, (nouvelle_taille_bouton[0], nouvelle_taille_bouton[1]))

    victoire_image = pygame.transform.scale(victoire_image, (largeur, hauteur))

    defaite_image = pygame.transform.scale(defaite_image, (largeur, hauteur))

    # Classe Pokémon

    class Pokemon:

        def __init__(self, nom, image, position, niveau=1, vie_max=100):

            self.nom = nom

            self.image = image

            self.rect = image.get_rect()

            self.rect.topleft = position

            self.niveau = niveau

            self.vie_max = vie_max

            self.vie = vie_max

        def attaquer(self, adversaire):

            degats = random.randint(5, 15) * (self.niveau / 2)

            adversaire.subir_degats(degats)

        def attaquer_joueur(self, joueur):

            degats = random.randint(5, 15) * (self.niveau / 2)

            joueur.subir_degats(degats)

        def subir_degats(self, degats):

            self.vie -= degats

            if self.vie < 0:

                self.vie = 0

    # Classe Bouton

    class Bouton:

        def __init__(self, image, position, action):

            self.image = image

            self.rect = image.get_rect()

            self.rect.topleft = position

            self.action = action

        def afficher(self, fenetre):

            fenetre.blit(self.image, self.rect)

    # Écran de sélection de Pokémon

    class EcranSelectionPokemon:

        def __init__(self, fenetre):

            self.fenetre = fenetre  # Ajout de l'attribut fenetre

            self.pokemons_disponibles = [

                Pokemon("gandalf", pygame.transform.scale(pygame.image.load("gandalf.png"), nouvelle_taille_pokemon), (50, 100)),

                Pokemon("tanjiro", pygame.transform.scale(pygame.image.load("tanjiro.png"), nouvelle_taille_pokemon), (200, 100)),

                Pokemon("harry", pygame.transform.scale(pygame.image.load("harry.png"), nouvelle_taille_pokemon), (350, 100)),

                Pokemon("vador", pygame.transform.scale(pygame.image.load("vador.png"), nouvelle_taille_pokemon), (500, 100)),

            ]

            self.pokemon_selecione = None

            self.bouton_quitter = Bouton(quit_button_image, (50, 50), self.quit_game)

            self.temps_debut_affichage = pygame.time.get_ticks()  # Ajout de l'attribut

        def selectionner_pokemon(self, pokemon):

            self.pokemon_selecione = pokemon

        def quit_game(self):

            pygame.quit()

            sys.exit()

        def afficher(self):

            self.fenetre.blit(fond_selection_image, (0, 0))

            # Afficher les Pokémon disponibles

            for i, pokemon in enumerate(self.pokemons_disponibles):

                decalage_x = i * (nouvelle_taille_pokemon[0] + 20)  # Espace entre les images

                pokemon.rect.topleft = (pokemon.rect.topleft[0] + decalage_x, hauteur // 2 - nouvelle_taille_pokemon[1] // 2)

                self.fenetre.blit(pokemon.image, pokemon.rect)

            if self.pokemon_selecione is not None:

                self.fenetre.blit(self.pokemon_selecione.image, self.pokemon_selecione.rect)

            self.bouton_quitter.afficher(self.fenetre)

            pygame.display.flip()

    # Classe CombatPokemon

    class CombatPokemon:

        def __init__(self, fenetre, pokemon_joueur, pokemon_adversaire):

            self.fenetre = fenetre  # Ajout de l'attribut fenetre

            self.pokemon_joueur = pokemon_joueur

            self.pokemon_adversaire = pokemon_adversaire

            self.bouton_attaque = Bouton(bouton_attaque_image, (largeur - nouvelle_taille_bouton[0] - 50, hauteur - nouvelle_taille_bouton[1] - 30), self.pokemon_joueur.attaquer)

            self.quit_button = Bouton(quit_button_image, (20, 20), self.quit_game)  # Modifier la position

            self.game_over = False

            self.victoire = False  # Ajout de l'attribut

        def quit_game(self):

            pygame.quit()

            sys.exit()

        def gestion_combat(self):

            if not self.game_over:

                for event in pygame.event.get():

                    if event.type == pygame.QUIT:

                        self.quit_game()

                    elif event.type == pygame.MOUSEBUTTONDOWN:

                        if event.button == 1:  # Clic gauche

                            if self.bouton_attaque.rect.collidepoint(event.pos):

                                self.bouton_attaque.action(self.pokemon_adversaire)

                                self.pokemon_adversaire.attaquer_joueur(self.pokemon_joueur)

                            elif self.quit_button.rect.collidepoint(event.pos):

                                self.quit_button.action()

                # Vérifier si le Pokémon joueur a perdu

                if self.pokemon_joueur.vie <= 0:

                    self.game_over = True

                    self.victoire = False

                # Vérifier si le Pokémon adversaire a perdu

                if self.pokemon_adversaire.vie <= 0:

                    self.game_over = True

                    self.victoire = True

        def afficher(self):

            self.fenetre.blit(fond_combat_image, (0, 0))

            # Afficher la barre de vie du joueur au-dessus de l'image

            pygame.draw.rect(self.fenetre, (255, 0, 0), (50, hauteur - nouvelle_taille_pokemon[1] - 80, self.pokemon_joueur.vie / self.pokemon_joueur.vie_max * nouvelle_taille_pokemon[0], 20))

            self.fenetre.blit(self.pokemon_joueur.image, (50, hauteur - nouvelle_taille_pokemon[1] - 30))

            # Afficher la barre de vie de l'adversaire en haut à droite

            pygame.draw.rect(self.fenetre, (255, 0, 0), (largeur - nouvelle_taille_pokemon[0] - 50, 50, self.pokemon_adversaire.vie / self.pokemon_adversaire.vie_max * nouvelle_taille_pokemon[0], 20))

            self.fenetre.blit(self.pokemon_adversaire.image, (largeur - nouvelle_taille_pokemon[0] - 50, 80))

            # Vérifier si le jeu est terminé et afficher l'image correspondante

            if self.game_over:

                if self.victoire:

                    self.fenetre.blit(victoire_image, (0, 0))

                else:

                    self.fenetre.blit(defaite_image, (0, 0))

            # Afficher les boutons

            self.bouton_attaque.afficher(self.fenetre)

            self.quit_button.afficher(self.fenetre)

            pygame.display.flip()

    # Instance de EcranSelectionPokemon

    fenetre = pygame.display.set_mode((largeur, hauteur), pygame.FULLSCREEN)

    ecran_selection = EcranSelectionPokemon(fenetre)

    # Afficher les Pokémon disponibles pendant toute la durée de l'écran de sélection

    while pygame.time.get_ticks() - ecran_selection.temps_debut_affichage < 15000:

        ecran_selection.afficher()

    # Supprimer les images non choisies

    for pokemon in ecran_selection.pokemons_disponibles:

        if pokemon != ecran_selection.pokemon_selecione:

            ecran_selection.pokemons_disponibles.remove(pokemon)

    # Instance de CombatPokemon avec le Pokémon choisi et un Pokémon adverse aléatoire

    pokemon_joueur_selectionne = ecran_selection.pokemon_selecione

    pokemon_adversaire_selectionne = random.choice(ecran_selection.pokemons_disponibles)

    combat = CombatPokemon(fenetre, pokemon_joueur_selectionne, pokemon_adversaire_selectionne)

    # Boucle principale pour le combat

    clock = pygame.time.Clock()

    while True:

        combat.gestion_combat()

        combat.afficher()

        # Limiter la fréquence d'images

        clock.tick(30)

    • Partager sur Facebook
    • Partager sur Twitter
      25 janvier 2024 à 1:24:47

      Bonjour, Merci d'indiquer un titre de sujet en rapport avec votre problématique et de poster votre code de façon lisible.

      Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code </>

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton  </> de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: php;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Mauvais titre

      Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

      Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

      De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

      Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

      Merci de modifier votre titre. Pour cela, éditez le premier message de votre sujet.

      (titre originel : Projet Pygame)

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        25 janvier 2024 à 12:36:55

        c'est lequel qui s'affiche ? le 1er (gandalf) ou le dernier (vador) ? essai de les poser à des positions fixes (rentre en dur les positions de leur affichage)

        -
        Edité par umfred 25 janvier 2024 à 12:37:08

        • Partager sur Facebook
        • Partager sur Twitter

        Projet Pygame

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown