bonjour à tous pour mon projet de bac d'ISN je fais un pacman revisité. A l’intérieur je souhaite insérer des images mais la position doit être alétoire. J'ai réussi à trouver comment faire pour que la position de mon image soit aléatoire. Malgré cela mon image peut se mettre n'importe où, y compris sur les murs, ce que je ne souhaite pas évidemment. Je n'arrive pas à trouver une solution pour que mon image se mette aléatoirement exclusivement sur les chemin et non sur les murs. Merci pour votre aide
ps: voici mon programme pour le moment je n'est pas réussi à créer les murs en collision. le parcours est défini par la liste "Niveau", les "0" représentent les murs et les "1" les chemins.
################################################ PAC GIRL 2.0 ##################################################
""" Importation de pygame et de tous ses modules
+ Chargement et initialisation des modules """
import pygame
from pygame.locals import*
import random
pygame.init()
""" Définition des constantes """
nbr_case_longueur = 29
nbr_case_largeur = 16
taille_case = 30 #en pixels
longueur_fenetre = nbr_case_longueur * taille_case
largeur_fenetre = nbr_case_largeur * taille_case
######################################## CREATION DU PROGRAMME PRINCIPAL ######################################
def main(): #fonction associée au programme principal
#Initialisation de la fenètre d'affichage
pygame.display.set_caption("Pac Girl 2.0") #je renomme mon jeu
fenetre = pygame.display.set_mode((longueur_fenetre, largeur_fenetre))
#on crée une fenètre w/ le module display (de resolution 900*510)
#Chargement et collage du fond
fond = pygame.image.load("background.png").convert_alpha() #importation et convertion au format Pygame
fenetre.blit(fond, (0,0)) #collage de l'img en haut a droite de la fenetre
#Chargement et collage du personnage
perso = pygame.image.load("Pix.png").convert_alpha() #importation et convertion au format Pygame
position_perso = perso.get_rect() #création d'une surface en entourant l'image d'un rectangle
position_perso = pygame.Rect(0,210,30,30) #positionnement de la surface dans la case depart
fenetre.blit(perso, position_perso) #collage de l'img sur la fenètre
#chargement et collage d'une lettre
lettre = pygame.image.load("arrivee.png").convert_alpha() #importation et convertion au format pygame
position_lettre = lettre.get_rect() #création d'une surface en entourant l'image d'un rectangle
position_lettre = (random.randint(0,largeur_fenetre),random.randint(0,longueur_fenetre)) #definition d'une position aléatoire de l'img
fenetre.blit(lettre,position_lettre) #collage de l'img sur la fenètre de manière aléatoire
#Rafraîchissement de l'écran
pygame.display.flip()
################################## CREATION DU NIVEAU #################################################
Niveau = [
[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0],
[0,1,0,1,0,1,1,1,1,1,1,0,1,0,1,0],
[0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0],
[0,1,0,1,0,1,1,1,1,0,1,0,1,0,1,0],
[0,1,0,1,0,1,0,0,1,0,0,0,1,0,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0],
[0,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0],
[0,1,0,1,0,1,1,0,1,0,0,0,1,0,1,0],
[0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0],
[0,1,0,1,0,0,0,0,1,0,0,0,1,0,1,0],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0],
[0,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0],
[0,1,0,1,0,0,1,0,0,0,1,0,1,0,1,0],
[0,1,0,1,1,1,1,1,1,1,1,0,1,0,1,0],
[0,1,0,1,0,0,0,0,0,0,1,0,1,0,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,0,0,0,0,0,0,1,0,1,0,1,0,1,0],
[0,1,0,1,1,1,1,0,1,0,1,0,1,0,1,0],
[0,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0],
[0,1,0,1,0,0,1,0,1,1,1,0,1,0,1,0],
[0,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],
]
mur = pygame.image.load("Mur.png").convert_alpha() #importation et conversion au format pygame
#Création du niveau à partir de la structure écrite dans la liste [Niveau]
def Générer_niveau(surface, Niveau):
#pour chaque ligne
for i, ligne in enumerate(Niveau):
#pour chaque case
for j, case in enumerate(ligne):
#si la case est un 0, on y associe l'img du mur
if case == 0:
fenetre.blit(mur, (i*30, j*30)) #chaque case fait 30 pixels de coté
################################## LANCEMENT DU JEU ########################################
""" Création de la boucle principale """
continuer = True #continuer est un bool qui indique à la boucle de continuer à tourner
while continuer:
for event in pygame.event.get(): #on parcourt la liste des evènements reçus
#si on clique sur la croix, la fenetre se ferme
if event.type == pygame.QUIT:
continuer = False
#si on clique sur la touche echap du clavier, la fenetre se ferme
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
continuer = False
""" Liste des commandes claviers
Le personnage se deplace en fonction des flèches
du clavier """
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN:
position_perso = position_perso.move(0, 30) #deplacement d'une case vers le bas
elif event.key == pygame.K_UP:
position_perso = position_perso.move(0, -30) #deplacement d'une case vers le haut
elif event.key == pygame.K_RIGHT:
position_perso = position_perso.move(30, 0) #deplacement d'une case vers la droite
elif event.key == pygame.K_LEFT:
position_perso = position_perso.move(-30, 0) #deplacement d'une case vers la gauche
#Re-collage
fenetre.blit(fond, (0,0))
Générer_niveau(fenetre, Niveau)
fenetre.blit(perso, position_perso)
fenetre.blit(lettre,position_lettre)
#Rafraichissement
pygame.display.flip()
pygame.quit()
if __name__ == '__main__': main()
projet ISN
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.