TD Pygame: Shoot'Em Up⚓︎
Nous vous proposons de créer jeu vidéo du type shoot'em up, composé de:
- une classe Player
- une classe Game
- une classe Monster
- une classe Projectile
- une classe Comet
Assets⚓︎
Télécharger le fichier assets.zip
en cliquant ici
Puis décompressez-le (vous obtiendrez un dossier assets/
contenant tous les assets) :
Pour décompresser un fichier zippé, en ligne de commande, sur Linux :
- Commencer par déplacer le fichier
assets.zip
dans votre répertoire de travail (par exemple dans le dossierDocuments/votre_prenom/
) -
Déplacez-vous en ligne de commande dans votre répertoire de Travail :
$ cd Documents/votre_prenom
$ unzip assets.zip
Fichier main.py⚓︎
Créer un fichier main.py
qui contient le code principal du jeu:
import pygame
pygame.init()
# Générer la fenêtre du jeu
pygame.display.set_caption("Shoot'em Up")
screen = pygame.display.set_mode((1080,720))
# importer charger l'arrière plan
background = pygame.image.load("assets/bg.jpg")
running = True
while running:
# Appliquer le background à l'endroit (largeur, hauteur)
screen.blit(background, (0,0))
# Mettre à jour l'écran
pygame.display.flip()
# boucle de détection des événements
for event in pygame.event.get():
# si l'événement est une fermeture de fenêtre
if event.type == pygame.QUIT:
running = False
pygame.quit()
Classe Player⚓︎
Créer un fichier player.py
dans lequel vous définirez la classe Player
:
import pygame
class Player:
def __init__(self):
# A compléter
pass
pygame.display.set_caption("")
-
Créer les attributs d'instance suivants pour la classe Player:
self.health
: contient la vie restante du joueur (par défaut100
)self.max_health
: contient la valeur maximale de vie d'un joueur (par défaut100
)self.attack
: contient la valeur des dégâts d'un joueur (par défaut10
)self.velocity
: contient la vitesse de déplacement d'un joueur (par défaut5
)
-
Pour que la classe
Player
soit pris en compte par Pygame comme étant un composant graphique du jeu, visible et déplaçable, il FAUT que la classePlayer
soit un Sprite : Il faut donc que la classePlayer
doit hériter de la (super) classepygame.sprite.Sprite
import pygame class Player(pygame.sprite.Sprite): def __init__(self): # Pour hériter du contructeur de la classe parent super().__init__() # A compléter ... pygame.display.set_caption("")
- Créer un attribut
self.image
qui associe une image à la classePlayer
avec :self.image = pygame.image.load("chemin/vers/image.png")
- Créer un attribut
self.rect
qui récupèrer le rectangle de l'image du Joueur avec :self.rect = self.image.get_rect()
- Créer un attribut
-
Créer une variable
player
qui instancie la classePlayer
, dans le fichiermain.py
:- après
background =
- avant
running = True
- après
-
Appliquer l'image du joueur dans l'écran avec
screen.blit()
à la positionplayer.rect
-
Déplacer le player à la position
(x,y)=(300,300)
(par exemple) en définissant:self.rect.x = 300
self.rect.y = 300
Puis, en utilisant cette syntaxe, positionner le player en bas de l'image, au milieu.
Vous n'y arrivez pas ? Repartez de la solution ici
Classe Game⚓︎
Créer un fichier game.py
dans lequel vous définirez la classe Game
:
Cette classe sera en charge d'instancier tout ce dont on a besoin pour le jeu
import pygame
from player import Player
class Game:
def __init__(self):
# A compléter
self.player = Player()
-
Modifier et adaptez le code du fichier
main.py
de sorte que:- le player soit instancié dans la classe Game (comme montré ci-dessus)
- le player ne sera plus instancié dans
main.py
- Désormais, ce sera la variable
game
qui instancie la classeGame
dans le fichiermain.py
, par exemple grâce à l'instruction :game = Game()
Vous n'y arrivez pas ? Repartez de la solution ici