Introduction
Les shoot 'em up sont des jeux d’action rapides où le joueur contrôle un vaisseau ou un personnage qui doit tirer sur des vagues d'ennemis. Dans ce premier article, nous allons poser les bases de notre shoot 'em up en créant une fenêtre de jeu avec Pygame, un vaisseau contrôlé par le joueur, et la mécanique de tir.
1. Initialisation de Pygame et création de la fenêtre
Pour commencer, nous devons initialiser Pygame et créer une fenêtre dans laquelle notre jeu se déroulera.
import pygame
# Initialiser Pygame
pygame.init()
# Définir les dimensions de la fenêtre
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Shoot 'em Up")
# Définir la vitesse de rafraîchissement
clock = pygame.time.Clock()
Cette étape crée une fenêtre de 800x600 pixels où le jeu se déroulera, avec un titre approprié pour votre projet. L'objet clock
nous permettra de limiter le nombre de FPS (frames par seconde).
2. Création du vaisseau du joueur
Le joueur doit pouvoir contrôler un vaisseau. Nous allons définir un sprite représentant le vaisseau et lui permettre de se déplacer en utilisant les touches du clavier.
class Joueur(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.Surface((50, 40))
self.image.fill((0, 255, 0)) # Vaisseau vert
self.rect = self.image.get_rect()
self.rect.center = (screen_width // 2, screen_height - 50)
self.vitesse_x = 0
def update(self):
self.vitesse_x = 0
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.vitesse_x = -5
if keys[pygame.K_RIGHT]:
self.vitesse_x = 5
self.rect.x += self.vitesse_x
# Empêcher le vaisseau de sortir de l'écran
if self.rect.right > screen_width:
self.rect.right = screen_width
if self.rect.left < 0:
self.rect.left = 0
Le vaisseau est représenté par un rectangle vert que le joueur peut déplacer à gauche et à droite. La méthode update()
gère les touches du clavier pour ajuster la position du vaisseau.
3. Ajouter la capacité de tirer des projectiles
Un shoot 'em up n’est pas complet sans la possibilité de tirer. Nous allons créer un sprite pour les projectiles et permettre au joueur de tirer en appuyant sur la barre d’espace.
class Projectile(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pygame.Surface((5, 10))
self.image.fill((255, 0, 0)) # Projectile rouge
self.rect = self.image.get_rect()
self.rect.center = (x, y)
def update(self):
self.rect.y -= 10
if self.rect.bottom < 0:
self.kill() # Supprime le projectile quand il sort de l'écran
Ajoutons maintenant la gestion du tir dans le vaisseau :
class Joueur(pygame.sprite.Sprite):
# Ajout d'une méthode pour tirer
def tirer(self):
projectile = Projectile(self.rect.centerx, self.rect.top)
all_sprites.add(projectile)
projectiles.add(projectile)
Le vaisseau peut maintenant tirer des projectiles qui montent vers le haut. Pour tirer, nous utilisons self.rect.top
pour définir la position initiale du projectile.
4. Boucle de jeu principale
Enfin, mettons tout cela ensemble dans une boucle de jeu pour que le joueur puisse se déplacer et tirer.
# Groupes de sprites
all_sprites = pygame.sprite.Group()
projectiles = pygame.sprite.Group()
# Créer un joueur
joueur = Joueur()
all_sprites.add(joueur)
running = True
while running:
# Limiter à 60 FPS
clock.tick(60)
# Gestion des événements
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
joueur.tirer()
# Mettre à jour les sprites
all_sprites.update()
# Afficher à l'écran
screen.fill((0, 0, 0)) # Fond noir
all_sprites.draw(screen)
pygame.display.flip()
pygame.quit()
Dans cette boucle de jeu, nous vérifions les événements du clavier et utilisons joueur.tirer()
pour tirer des projectiles. Tous les sprites sont mis à jour et affichés à l’écran.
Conclusion
Dans cet article, nous avons créé les bases d'un shoot 'em up : une fenêtre de jeu, un vaisseau contrôlé par le joueur, et la capacité de tirer des projectiles. Dans le prochain article, nous ajouterons des ennemis, gèrerons les collisions, et mettrons en place un système de score.