Python pygame

Bonjour,
je suis un GRAND débutant sur pygame et je dois faire un jeu pour l’école.
le but est de faire afficher les éléments personnage, mur et bille.
Pour cela je dispose d’une liste de liste, qui dedans sera la trame de la fenêtre du jeu :

tableau=[['p','m','m','m','b'],
         ['b','b','b','b','b'],
         ['m','m','b','m','b'],
         ['b','b','b','b','b'],
         ['m','b','m','b','m']]

‹ p › correspond au personnage, ‹ m › pour le mur et ‹ b › pour la bille.

Je dispose également des images de ces derniers et du fond du jeu :

fenetre = pygame.display.set_mode((500, 500))

fond = pygame.image.load("background.png").convert_alpha()
fenetre.blit(fond, (0,0))
pygame.display.flip()
fenetre.blit(fond, (0,0))

perso = pygame.image.load("perso.png").convert_alpha()
pygame.display.flip()

mur = pygame.image.load("mur.png").convert_alpha()
pygame.display.flip()

bille = pygame.image.load("bille.png").convert_alpha()
pygame.display.flip()

J’aimerai faire le lien entre les éléments du tableau (p, m, b) avec les images personnage…
Comme ça quand je lance le jeu, les images se mettent a la place des éléments de la liste.

Merci pour vos réponse

Hello et bienvenue !

J’ai bien envie de t’aider, mais j’ai quelques questions avant parce que je n’ai pas non plus envie de faire tes « devoirs » à ta place.

En quelle classe, ou à quel niveau te demande-t-on de faire un jeu video en python ? Qu’est ce que vous avez déjà appris en cours autour de la programmation en python ? Ou de la programmation en général ?

As-tu déjà essayé de décomposer ce que tu voulais faire (« les images se mettent… ») en plus petits blocs pour vois comment une machine bête ferait ?

A+ !

(@ViX_LoW: pour écrire du code sur le forum il y a les trois quotes inversées de markdown, voir
https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code)

Alors je suis en 1ère, en classe on a vu les variables, les conditions, les boucles, les listes et les matrices.
Après de mon coté je ne code pas, je code juste en classe lorsqu’ils nous demandent des devoirs.
Et oui j’ai déjà essayé de décomposer ce que je voulais faire.
Merci infiniment de m’aider.

Et? Ça donne quoi ?
Comment expliquerais tu ton problème à un gosse de 6 ans?

Bonjour,
mon jeu doit apparaitre dans une fenêtre de 500 par 500.
La matrices contient 5 lignes, chacune mesure 100 de largueur et 500 de longueur, donc il y a 5 éléments par ligne. (voir ci dessus).
Mais ces éléments ne sont pas lier avec les images, style ‹ p › n’est pas lier avec l’image du personnage …
Pour ma part je sais faire le lien entre les éléments de la matrice et les images.
Mais mon problème est le suivant, je ne sais pas comment faire pour donner a un éléments de la matrice une position (x et y) dans le jeu, car quand je lance le jeu, il y a juste l’arrière plan. Il faut donc associer a chaque élément de la matrice de la matrice une longueur et une largeur de 100, donc chaque ligne de la matrice doit avoir pour longueur 500 et une larguer de 100.
J’espère avoir répondu a ta question.
Merci pour toute vos réponse.

Très bien, alors plusieurs questions :

  • où est le (0,0) sur ton écran ?
  • où est le (500,500)
  • as-tu dessiné sur le papier ton écran avec le quadrillage formé par des 25 éléments ?
  • sur ce quadrillage, peux-tu noter les coordonnées de chaque éléments ?
  • en t’aidant du modulo % et de la division entière // peux-tu retrouver ces coordonnées ?
1 J'aime
import time
import pygame
from pygame.locals import *
pygame.init()

fenetre = pygame.display.set_mode((500, 500))

fond = pygame.image.load("background.png").convert_alpha()
fenetre.blit(fond, (0,0))
pygame.display.flip()
fenetre.blit(fond, (0,0))

perso = pygame.image.load("perso.png").convert_alpha()
pygame.display.flip()

mur = pygame.image.load("mur.png").convert_alpha()
pygame.display.flip()

bille = pygame.image.load("bille.png").convert_alpha()
pygame.display.flip()

tableau=[['p','m','m','m','b'],
         ['b','b','b','b','b'],
         ['m','m','b','m','b'],
         ['b','b','b','b','b'],
         ['m','b','m','b','m']]

for i in range(0,len(tableau)):
    for j in range(0,len(tableau)):
        if tableau[i][j]=='p':
            tableau[i][j]=perso
        elif tableau[i][j]=='m':
            tableau[i][j]=mur
        else:
            tableau[i][j]=bille
print(tableau)

voila le programme entier.
Mais justement je ne sais pas comment associer des coordonnées au éléments de la matrice

image

Voila l’affichage finale que je dois réaliser. Mais ça serait trop facile de faire un objet par objet de l’association a une position (x,y). Donc le prof nous a demander de faire avec la matrice. La matrice représente l’affiche du jeu on peut voir ‹ p › le perso en au a gauche qui est en liant avec la photo. Mais dans la matrice les éléments ne possèdent pas de coordonné, ma question est comment attribuer des coordonées au éléments de la matrices pour quand on affiche la matrice, cette dernière ressemble a la photo.

Il y a quelques indices dans les questions que je t’ai posé.

Le (0,0) est en haut a gauche de l’image, A l’opposée en (500,500), c’est en bas a droite.
Après avec le modulo et // je ne vois pas

Essaie avec une matrice de 2x2. ça va être plus facile pour commencer et placer les bons chiffres aux bons endroits.

C’est a dire de placer les bons chiffres au bons endroits, je dois mettre les coordonnées a la place des éléments ‹ p ›…

C’est cette étape qui va te donner la solution :wink:

Oui d’accord j’ai compris mais je ne sais pas comment rentrer des coordonnées dans une listes

voila l’idée (avec des cercle et pas des images):

pour l une ligne de tableau
   Y = ???
   pour c une case de l
     X=???
     pygame.draw.circle(screen, (255,0,0), (X,Y),10)

Comme tu connais ton nombre de case par ligne et la longeur de ta ligne, tu peux trouver X
Comme tu connais ton nombre de ligne et la hauteur de ton ecran, tu peux trouver Y

Le modulo (%) est le reste de la division entière et ca peut t’aider a trouver X et Y.

D’accord merci je vais essayer de mon coté mais comment je fais le lien entre X et Y avec mes éléments de ma liste

Tu prends le problème a l’envers.

La question que tu dois te poser est « Que vais-je dessiner en X,Y? ».

Je suis dans un repère x: 500 et y:500
Le perso commence en 0,0
Le mur de droite est en 100,0
Etc pour les autre
Une ligne vaut 500,0
La ligne d apres 500,100

Mais ce que tu as écrit les X et Y correspond pour quoi un objet ou la matrice en entiere

Salut @ViX_LoW,

Je pense qu’Ewi essaie de te donner des coups de pouces tout en te laissant la possibilité de trouver l’astuce tout seul.
Normalement dès que tu auras vu le truc ça deviendra plus facile pour toi, et pour voir le truc je pense que tu devrais rajouter un peu de concret dans ta réflexion.

Ce que je te proposerais, c’est de prendre un dé, une feuille et un crayon.
Lance le dé deux fois pour retrouver un élément de ta matrice, une fois pour la ligne et une fois pour la colonne (relance juste les 6).
Note ce numéro de ligne/colonne sur ta feuille et calcule de tête la position X,Y de l’image à afficher, en pixel.
Note cette position à côté des numéro, comme ça tu auras d’un coté la position ligne/colonne de l’élément du tableau et de l’autre la position X,Y en pixel de l’image associée.

Recommence ça 5 ou 6 fois, pour avoir plusieurs positions d’éléments avec à côté de chacun la position en pixel qui correspond.

Une fois que tu as ça, essaie de voir si tu arrives à en ressortir quelque chose qui te semble intéressant.