C'est un jeu avec 3 niveaux + un niveau bonus et j'aimerais que quand le joueur démarre le jeu, le niveau 1 soit accessible, mais pas les autres niveaux, quand le joueur fini le niveau 1, il peut accéder au niveau 2, mais pas aux niveaux supérieurs, quand il finit le niveau 2, il peut accéder au niveau 3, mais pas au niveau bonus et quand il finit le niveau 3, il peut accéder au niveau bonus.
Voici le code du jeu:
import pygame import random import time import sys
pygame.init()
pygame.display.set_caption("Jeu de la Frite") screen = pygame.display.set_mode((1080, 720))
background = pygame.image.load(r'C:\Users\User\PycharmProjects\Jeu De La Frite\Capture décran .png')
images_boutons = { "Niveau 1": pygame.image.load(r'C:\Users\User\PycharmProjects\Jeu De La Frite\DALL·E 2023-08-15 13.51.15 - interieur restrauranta frite style dessin colorie.png'), "Niveau 2": pygame.image.load(r'C:\Users\User\PycharmProjects\Jeu De La Frite\DALL·E 2023-08-20 12.26.23 - interieur restrauranta frite style dessin colorie2.png'), "Niveau 3": pygame.image.load(r'C:\Users\User\PycharmProjects\Jeu De La Frite\DALL·E 2023-08-20 12.36.48 - une restrauranta frite style dessin colorie.png'), "Niveau Bonus": pygame.image.load(r'C:\Users\User\PycharmProjects\Jeu De La Frite\DALL·E 2023-08-20 13.33.25 - interieur restrauranta frite style dessin colorie.png') }
frite_image = pygame.image.load(r'C:\Users\User\PycharmProjects\Jeu De La Frite\frite-removebg-preview.png')
# Chargez l'image du boutonpip install pyinstaller "Quitter" quit_button_image = pygame.image.load(r'C:\Users\User\PycharmProjects\Jeu De La Frite\quit_button.png')
class Frite: def __init__(self, image, position): self.image = image self.position = position self.scale = 1.0 frite = Frite(frite_image, None)
current_image = None bonus_scale = 0.2 # Échelle spécifique au niveau bonus bonus_timer = None bonus_move_timer = None # Ajout du timer pour le mouvement de la frite au niveau bonus bouton_hauteur = 50 bouton_marge = 20 total_height = (bouton_hauteur + bouton_marge) * len(images_boutons) - bouton_marge
for i, (nom_bouton, image_bouton) in enumerate(images_boutons.items()): bouton_rect = pygame.Rect(500 - x_offset, y_offset + i * (bouton_hauteur + bouton_marge), 200, bouton_hauteur) scale = 0.75 if nom_bouton == "Niveau 1" else 0.5 if nom_bouton == "Niveau 2" else 0.25 buttons.append({"text": nom_bouton, "rect": bouton_rect, "image": image_bouton, "scale": scale})
buttons[1]["image_x_offset"] = 200 # Décalage de l'image du bouton 2 vers la droite # Définissez la position et la taille du bouton "Quitter" quit_button_rect = quit_button_image.get_rect() quit_button_rect.topleft = (10, 600 - 70)
if button_data["rect"].collidepoint(pygame.mouse.get_pos()) and game_state == "menu": if pygame.mouse.get_pressed()[0]: current_image = button_data["image"] game_state = "jeu" if button_data["text"] == "Niveau 1": frite.scale = 1.0 elif button_data["text"] == "Niveau 2": frite.scale = 0.75 elif button_data["text"] == "Niveau 3": frite.scale = 0.5 elif button_data["text"] == "Niveau Bonus": frite.scale = bonus_scale frite.position = (random.randint(0, 1080 - frite.image.get_width()), random.randint(0, 720 - frite.image.get_height())) bonus_timer = time.time() + 5 # Réinitialise le timer lorsque vous revenez au menu current_scale = frite.scale # Sauvegarde l'échelle actuelle print("Changement d'état vers 'jeu'") print(f"Frite position: {frite.position}, Frite scale: {frite.scale}")
# Affichez le bouton "Quitter" screen.blit(quit_button_image, quit_button_rect.topleft)
if current_image: if game_state == "menu" and "image_x_offset" in buttons[1]: screen.blit(current_image, (buttons[1]["rect"].x + buttons[1]["image_x_offset"], 0)) else: screen.blit(current_image, (0, 0))
if game_state == "jeu" and frite.position: scaled_frite = pygame.transform.scale(frite.image, (int(frite.image.get_width() * frite.scale), int(frite.image.get_height() * frite.scale))) screen.blit(scaled_frite, frite.position)
if game_state == "bonus": if bonus_timer is not None and time.time() >= bonus_timer: frite.scale = random.uniform(0.1, 1.0) # Change la taille de la frite de manière aléatoire frite.position = (random.randint(0, 1080 - frite.image.get_width()), random.randint(0, 720 - frite.image.get_height())) bonus_timer = time.time() + 5 if bonus_move_timer is None or time.time() >= bonus_move_timer: frite.position = (random.randint(0, 1080 - frite.image.get_width()), random.randint(0, 720 - frite.image.get_height())) bonus_move_timer = time.time() + 4 # Réinitialisation du timer pour le prochain mouvement aléatoire pygame.display.flip()
for event in pygame.event.get(): if event.type == pygame.QUIT: running = False print("Quitting the game") if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: mouse_pos = pygame.mouse.get_pos() print(f"Mouse position: {mouse_pos}") print(f"Quit button rectangle: {quit_button_rect}")
if game_state == "menu" and quit_button_rect.collidepoint(mouse_pos): running = False # Quittez le jeu si le bouton "Quitter" est cliqué print("Quitting the game from menu") elif game_state == "jeu" and frite.position and frite.position[0] <= mouse_pos[0] <= frite.position[ 0] + scaled_frite.get_width() and frite.position[1] <= mouse_pos[1] <= frite.position[ 1] + scaled_frite.get_height(): current_image = None game_state = "menu" frite.scale = current_scale # Rétablir l'échelle précédente print("Changement d'état vers 'menu'") print(f"Frite position: {frite.position}, Frite scale: {frite.scale}")
pygame.time.delay(10) # Ajout d'un léger délai pour éviter une utilisation excessive du processeur pygame.quit() sys.exit()
bah il faut connaitre le niveau actuel du joueur, "désactiver" les niveaux supérieurs au niveau+1; quand le joueur a fini un niveau, on met à jour le niveau actuel, et activer les niveaux alors jouables
C'est quand même dommage d'utiliser le mot clé class sans rien modéliser de son jeu.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Gestion des niveaux pour un jeu pygame en python
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
Python c'est bon, mangez-en.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)