TS - ISN - TP Python et Pygame - Séance du 29 janvier 2016 Ce TP

publicité
TS - ISN - TP Python et Pygame - Séance du 29 janvier 2016
Ce TP se base sur le langage python. On travaille avec une version 3.* de python.
On travaille ici en particulier avec la bibliothèque Pygame qui permet de gérer facilement un affichage 2D.
But du TP ? Réaliser un jeu « Mario joue au foot » comme présenté par l’enseignant en début de séance !
Fichiers fournis :
• avant-gout.py
• ballon.gif
• mario-right.png
• mario-left.png
• avant-gout.py
• squelette-pygame.py
• bravo.ogg
• sifflet.ogg
• Tuto pygame.pdf
Un avant-goût : fichier avant-gout.py
import sys, pygame
pygame.init()
size = width, height = 320, 240
speed = [2, 2]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("ballon.gif").convert_alpha()
ballrect = ball.get_rect()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
ballrect = ballrect.move(speed)
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = -speed[1]
screen.fill(black)
screen.blit(ball, ballrect)
pygame.time.delay(30)
pygame.display.flip()
Il faut tout comprendre dans ce code !
Des aides sur http://fr.wikibooks.org/wiki/Pygame/Introduction_à_Pygame.
En particulier :
• Quelle est la différence entre ball, ballon.gif et ballrect ?
• Que représente screen et que font les commandes screen.fill() et screen.blit() ?
• Toutes les commandes commençant par pygame. ? Qu’est-ce que pygame.event.get() ?
Sources et liens :
• Un site de référence : http://isn-marchal.com/site/pygame.html pour les squelettes et le tutoriel Tuto
pygame.pdf, sur le site ISN d’une éminente collègue. Mis à disposition selon les termes de la licence Creative
Commons CC BY-NC-SA 3.0 FR http://creativecommons.org/licenses/by-nc-sa/3.0/fr/.
• Tutoriel Python : http://python.lycee.free.fr/
• Guide du débutant Pygame : http://fr.wikibooks.org/wiki/Pygame/Guide_du_débutant
• La page http://fr.wikibooks.org/wiki/Pygame/Introduction_à_Pygame a fourni l’avant-goût.
• Le site officiel de Pygame : http://www.pygame.org
Dans le vif du sujet : à partir du fichier squelette-pygame.py
import pygame #importation de pygame
import traceback #module pour récupérer des infos sur les erreurs
from pygame.locals import * #on importe les constantes de pygame
pygame.init() #on lance pygame
#toujours encadrer vos programmes pygame par try et finally ce qui permet de fermer correctement la f
try:
#création d’une fenêtre
fenetre=pygame.display.set_mode((800,600))#fenêtre de taille 640*480
continuer=1
#boucle perpétuelle qui permet de garder la fenêtre ouverte
while continuer:
for event in pygame.event.get():
#pygame prend le premier évènement de la file
if event.type==QUIT: #l’évènement QUIT correspond au clic sur la croix
continuer=0 #permet de quitter la boucle
except :
traceback.print_exc()
finally:
pygame.quit()
exit()
Ordre proposé :
1. Colorier la fenêtre graphique en vert qui fasse pelouse.
2. Tracer les trois rectangles blancs à l’écran, le terrain et les deux buts. Et un « rond central » : un cercle
blanc.
3. Placer le personnage à l’écran.
4. Récupérer son rectangle et le poser à la position voulue : dans le « rond central ».
5. Gérer le déplacement du personnage avec les touches du clavier.
6. Gérer le fait que le personnage soit bien orienté, à gauche ou à droite suivant les touches pressées.
7. Faire apparaître une balle en haut à gauche et la faire avancer d’un angle de 45 degrés dans le terrain.
C’est le rectangle autour de la balle qui se « déplace ».
8. Rajouter un rectangle (invisible) à l’extérieur du terrain, de manière à ce que si le rectangle de la balle
entre en collision avec ce rectangle, rectangle de la balle.colliderect(le rectangle de touche),
alors sifflet.ogg retentisse.
9. Faire en sorte que la balle apparaisse à un coin aléatoire du terrain, et se déplace vers l’intérieur du terrain
avec un angle aléatoire.
10. Créer une liste de rectangles de touche, pour que la touche soit gérée quelle que soit la direction de la balle.
11. Gérer le fait que si la balle rentre en collision avec le personnage, elle « rebondisse ».
12. Gérer les buts, un peu comme les touches, mais avec bravo.ogg.
13.
• Créer une liste de balles, vide au début [].
• Chaque balle est maintenant aussi une liste newball=[son rectangle, sa vitesse, son statut].
◦ Le rectangle est à créer,
◦ la vitesse à définir, c’est certainement un couple,
◦ et le statut est un entier qui indique si la balle est dans le but, si elle est « sortie », etc.
• Les nouvelles balles apparaissent à intervalles réguliers ou aléatoires, et se rajoutent à la liste de balles.
• Si la balle est dans un but ou dehors, il faut ensuite la supprimer de la liste.
• Une boucle de type for balle in liste de balles : gère les déplacements, les collisions et le statut
des balles.
14. Gérer le score, à l’aide d’une variable et d’un affichage de texte...
15. A vous de finir avec les améliorations qui vous semblent nécessaires !
Bon courage ... et bon amusement !
Téléchargement