Jeu de Pong classique avec Python et Pygame

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce projet, vous allez apprendre à créer un jeu de Pong en utilisant Python et la bibliothèque Pygame. Pong est un jeu arcade classique à deux joueurs où les joueurs contrôlent des palettes pour envoyer une balle l'une à l'autre.

Pour terminer ce projet, vous devrez suivre les étapes suivantes. Nous commencerons par créer les fichiers du projet et configurer la fenêtre du jeu. Ensuite, nous définirons les couleurs et configurerons les palettes et la balle. Enfin, nous déplacerons les palettes et la balle, gérerons les collisions et dessinons les éléments du jeu.

👀 Aperçu

Capture d'écran d'aperçu du jeu Pong

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment créer les fichiers du projet
  • Comment configurer la fenêtre du jeu
  • Comment configurer les palettes et la balle
  • Comment configurer les variables du jeu
  • Comment configurer la boucle de jeu
  • Comment déplacer les palettes
  • Comment déplacer la balle
  • Comment gérer les collisions de la balle
  • Comment mettre à jour les scores et réinitialiser la balle
  • Comment gérer les collisions et le mouvement des power-ups
  • Comment dessiner les éléments du jeu
  • Comment dessiner le score
  • Comment mettre à jour l'affichage
  • Comment définir le nombre d'images par seconde (FPS)
  • Comment quitter le jeu

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Utiliser la bibliothèque Pygame pour créer une fenêtre de jeu
  • Configurer et déplacer des objets de jeu tels que des palettes et une balle
  • Gérer les collisions entre les objets de jeu
  • Mettre à jour et afficher les scores du jeu
  • Définir le nombre d'images par seconde (FPS) pour le jeu
  • Quitter le jeu correctement

Créer les fichiers du projet

Créez un fichier nommé pong_game.py dans votre éditeur de code ou IDE préféré. Ce sera le fichier principal où vous écrirez le code pour le jeu de Pong.

cd ~/projet
touch pong_game.py
sudo pip install pygame

Configurer la fenêtre du jeu

Dans le fichier pong_game.py, importez les bibliothèques requises au début du code :

import pygame
import random

Ensuite, initialisez Pygame en appelant pygame.init() :

## Initialiser Pygame
pygame.init()

Ensuite, configurez la fenêtre du jeu en définissant la largeur, la hauteur et le nombre d'images par seconde (FPS) :

## Configurer la fenêtre du jeu
LARGEUR = 800
HAUTEUR = 400
FPS = 60

Définissez les couleurs utilisées dans le jeu :

## Définir les couleurs
NOIR = (0, 0, 0)
BLANC = (255, 255, 255)
BLEU = (0, 0, 255)
ORANGE = (255, 165, 0)
COULEUR_FOND = (50, 50, 50)

Créez la fenêtre du jeu, définissez le titre de la fenêtre et créez un objet horloge pour contrôler le taux de trame :

## Configurer la fenêtre du jeu
ecran = pygame.display.set_mode((LARGEUR, HAUTEUR))
pygame.display.set_caption("Jeu de Pong")
horloge = pygame.time.Clock()
✨ Vérifier la solution et pratiquer

Configurer les palettes et la balle

Définissez les propriétés des palettes, telles que la largeur, la hauteur, la vitesse et la couleur :

## Configurer les palettes
LARGEUR_PALETTE = 10
HAUTEUR_PALETTE = 60
VITESSE_PALETTE = 5
COULEUR_PALETTE = BLANC

Créez deux objets de palette à l'aide du constructeur pygame.Rect() et positionnez-les au centre de chaque côté de la fenêtre du jeu :

palette1 = pygame.Rect(0, HAUTEUR / 2 - HAUTEUR_PALETTE / 2, LARGEUR_PALETTE, HAUTEUR_PALETTE)
palette2 = pygame.Rect(
    LARGEUR - LARGEUR_PALETTE, HAUTEUR / 2 - HAUTEUR_PALETTE / 2, LARGEUR_PALETTE, HAUTEUR_PALETTE
)

Configurez les propriétés de la balle, telles que la largeur, la hauteur, la vitesse et la couleur :

## Configurer la balle
LARGEUR_BALLE = 10
HAUTEUR_BALLE = 10
VITESSE_BALLE_X = 3
VITESSE_BALLE_Y = 3
COULEUR_BALLE = BLANC

Créez un objet de balle à l'aide du constructeur pygame.Rect() et positionnez-le au centre de la fenêtre du jeu :

balle = pygame.Rect(
    LARGEUR / 2 - LARGEUR_BALLE / 2, HAUTEUR / 2 - HAUTEUR_BALLE / 2, LARGEUR_BALLE, HAUTEUR_BALLE
)

Définissez la vitesse initiale de la balle dans les deux directions x et y de manière aléatoire :

vitesse_balle_x = VITESSE_BALLE_X * random.choice((1, -1))
vitesse_balle_y = VITESSE_BALLE_Y * random.choice((1, -1))
✨ Vérifier la solution et pratiquer

Configurer les variables du jeu

Configurez les variables pour suivre les scores des joueurs, créez un objet de police de jeu et définissez la couleur pour l'affichage du score :

## Configurer les variables du jeu
score1 = 0
score2 = 0
police_jeu = pygame.font.SysFont(None, 48)
COULEUR_SCORE = BLANC
✨ Vérifier la solution et pratiquer

Configurer la boucle de jeu

Créez une variable booléenne running et définissez-la sur True pour démarrer la boucle de jeu :

## Configurer la boucle de jeu
en_cours = True
while en_cours:

Dans la boucle de jeu, gérer les événements en parcourant les événements survenus :

    for evenement in pygame.event.get():
        if evenement.type == pygame.QUIT:
            en_cours = False
✨ Vérifier la solution et pratiquer

Déplacer les palettes

Dans la boucle de jeu, vérifiez l'entrée du clavier pour déplacer les palettes :

    ## Déplacer les palettes
    touches = pygame.key.get_pressed()
    if touches[pygame.K_w] and palette1.y > 0:
        palette1.y -= VITESSE_PALETTE
    if touches[pygame.K_s] and palette1.y < HAUTEUR - HAUTEUR_PALETTE:
        palette1.y += VITESSE_PALETTE
    if touches[pygame.K_UP] and palette2.y > 0:
        palette2.y -= VITESSE_PALETTE
    if touches[pygame.K_DOWN] and palette2.y < HAUTEUR - HAUTEUR_PALETTE:
        palette2.y += VITESSE_PALETTE
✨ Vérifier la solution et pratiquer

Déplacer la balle

Dans la boucle de jeu, mettez à jour la position de la balle :

    ## Déplacer la balle
    balle.x += vitesse_balle_x
    balle.y += vitesse_balle_y
✨ Vérifier la solution et pratiquer

Gérer les collisions de la balle

Dans la boucle de jeu, gérer les collisions de la balle avec les palettes et les murs :

    ## Collision de la balle avec les palettes
    if balle.colliderect(palette1) ou balle.colliderect(palette2):
        vitesse_balle_x *= -1

    ## Collision de la balle avec les murs
    if balle.y > HAUTEUR - HAUTEUR_BALLE ou balle.y < 0:
        vitesse_balle_y *= -1
✨ Vérifier la solution et pratiquer

Mettre à jour les scores et réinitialiser la balle

Dans la boucle de jeu, mettez à jour les scores et réinitialisez la balle lorsqu'elle dépasse la palette :

    ## Augmenter le score et réinitialiser la balle
    if balle.x < 0:
        score2 += 1
        balle.center = (LARGEUR / 2, HAUTEUR / 2)
        vitesse_balle_x *= random.choice((1, -1))
        vitesse_balle_y *= random.choice((1, -1))
    if balle.x > LARGEUR:
        score1 += 1
        balle.center = (LARGEUR / 2, HAUTEUR / 2)
        vitesse_balle_x *= random.choice((1, -1))
        vitesse_balle_y *= random.choice((1, -1))
✨ Vérifier la solution et pratiquer

Gérer les collisions et le mouvement des boosts de puissance

Dans la boucle de jeu, gérer les collisions des boosts de puissance avec les palettes et déplacer le boost de puissance :

    ## Collision du boost de puissance avec les palettes
    if boost_de_puissance.colliderect(palette1) ou boost_de_puissance.colliderect(palette2):
        boost_de_puissance_actif = True
        boost_de_puissance.x = LARGEUR / 2 - LARGEUR_BOOST_DE_PUISSANCE / 2
        boost_de_puissance.y = HAUTEUR / 2 - HAUTEUR_BOOST_DE_PUISSANCE / 2

    ## Mouvement du boost de puissance
    if boost_de_puissance_actif:
        boost_de_puissance.x += vitesse_boost_de_puissance_x
        boost_de_puissance.y += vitesse_boost_de_puissance_y

        if boost_de_puissance.x > LARGEUR - LARGEUR_BOOST_DE_PUISSANCE ou boost_de_puissance.x < 0:
            vitesse_boost_de_puissance_x *= -1
        if boost_de_puissance.y > HAUTEUR - HAUTEUR_BOOST_DE_PUISSANCE ou boost_de_puissance.y < 0:
            vitesse_boost_de_puissance_y *= -1
✨ Vérifier la solution et pratiquer

Dessiner les éléments du jeu

Dans la boucle de jeu, dessinez les palettes, la balle, le boost de puissance et le score sur la fenêtre de jeu :

    ## Dessiner les éléments du jeu
    screen.fill(COULEUR_FOND)
    pygame.draw.rect(screen, COULEUR_PALETTE, palette1)
    pygame.draw.rect(screen, COULEUR_PALETTE, palette2)
    pygame.draw.ellipse(screen, COULEUR_BALLE, balle)
    pygame.draw.rect(screen, COULEUR_BOOST_DE_PUISSANCE, boost_de_puissance)
✨ Vérifier la solution et pratiquer

Dessiner le score

Dans la boucle de jeu, dessinez les scores au centre supérieur de la fenêtre de jeu :

    ## Dessiner le score
    texte_score = police_du_jeu.render(f"{score1} : {score2}", Vrai, COULEUR_SCORE)
    screen.blit(texte_score, (LARGEUR / 2 - texte_score.get_width() / 2, 10))
✨ Vérifier la solution et pratiquer

Mettre à jour l'affichage

Dans la boucle de jeu, mettez à jour l'affichage pour montrer les changements :

    ## Mettre à jour l'affichage
    pygame.display.flip()
✨ Vérifier la solution et pratiquer

Régler le nombre d'images par seconde (FPS)

Dans la boucle de jeu, réglez le taux d'images par seconde pour contrôler la vitesse du jeu :

    ## Régler le FPS
    clock.tick(FPS)
✨ Vérifier la solution et pratiquer

Quitter le jeu

Après la boucle de jeu, ajoutez la ligne suivante pour quitter Pygame lorsque le jeu est terminé :

## Quitter le jeu
pygame.quit()

Retournez sur le bureau et exécutez le projet en utilisant la commande suivante :

python pong_game.py

Maintenant, vous pouvez jouer au jeu Pong en utilisant les flèches directionnelles et les touches W et S de votre clavier.

Capture d'écran du jeu Pong
✨ Vérifier la solution et pratiquer

Sommaire

Félicitations ! Vous avez terminé le projet étape par étape de création d'un jeu de Pong en utilisant Python et Pygame. Vous avez appris à configurer la fenêtre de jeu, à définir les propriétés des palettes et de la balle, à gérer les événements du jeu, à déplacer les palettes et la balle, à gérer les collisions et à dessiner les éléments du jeu. Expérimentez différentes modifications pour ajouter vos propres améliorations au jeu et amusez-vous bien !