Jeu de serpent avec Python et Pygame

PythonBeginner
Pratiquer maintenant

Introduction

Ce projet vous guidera tout au long du processus de création d'un jeu de serpent en utilisant Python et la bibliothèque Pygame. Le jeu aura une fenêtre de jeu, un serpent, un bonus et un score. Le serpent se déplacera dans la fenêtre de jeu et mangera le bonus. Lorsque le serpent mange le bonus, la longueur du serpent augmentera d'un cran. Le score sera affiché à l'écran.

👀 Aperçu

Capture d'écran d'aperçu du jeu de serpent

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment créer une fenêtre de jeu à l'aide de Pygame
  • Comment gérer l'entrée utilisateur pour contrôler le mouvement du serpent
  • Comment créer et mettre à jour la position du serpent
  • Comment dessiner le serpent et le bonus à l'écran
  • Comment détecter les collisions entre le serpent et le bonus
  • Comment suivre le score
  • Comment afficher le score à l'écran

🏆 Réalisations

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

  • Utiliser Pygame pour créer une fenêtre de jeu graphique
  • Gérer l'entrée utilisateur pour contrôler le jeu
  • Créer et mettre à jour des objets de jeu
  • Détecter les collisions dans un jeu
  • Afficher et mettre à jour le score du jeu

Créer les fichiers du projet

Créez un nouveau fichier nommé snake_game.py et ouvrez-le dans un éditeur de code.

cd ~/projet
touch snake_game.py
sudo pip install pygame
✨ Vérifier la solution et pratiquer

Importer les modules nécessaires

Dans le fichier snake_game.py, importez les modules pygame et random :

import pygame
import random
✨ Vérifier la solution et pratiquer

Initialiser Pygame

Après avoir importé les modules, initialisez Pygame :

pygame.init()
✨ Vérifier la solution et pratiquer

Configurer la fenêtre de jeu

Définissez la largeur, la hauteur et le nombre d'images par seconde (FPS) de la fenêtre de jeu :

LARGEUR = 800
HAUTEUR = 600
FPS = 10
✨ Vérifier la solution et pratiquer

Définir les couleurs

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

NOIR = (0, 0, 0)
BLANC = (255, 255, 255)
VERT = (0, 255, 0)
ROUGE = (255, 0, 0)
BLEU = (0, 0, 255)
JAUNE = (255, 255, 0)
COULEUR_FOND = (50, 50, 50)
✨ Vérifier la solution et pratiquer

Configurer la fenêtre de jeu

Configurez la fenêtre de jeu avec la largeur et la hauteur définies :

écran = pygame.display.set_mode((LARGEUR, HAUTEUR))
pygame.display.set_caption("Snake Game")
horloge = pygame.time.Clock()

Dans le code ci-dessus, pygame.display.set_mode() est utilisé pour initialiser l'affichage avec la largeur et la hauteur spécifiées. pygame.display.set_caption() est utilisé pour définir le titre de la fenêtre de jeu. pygame.time.Clock() est utilisé pour suivre le temps dans le jeu.

✨ Vérifier la solution et pratiquer

Configurer le serpent

Définissez la taille d'un bloc et la vitesse du serpent :

taille_bloc_serpent = 20
vitesse_serpent = 5

Nous définissons la taille d'un bloc sur 20 et la vitesse sur 5. Cela signifie que le serpent se déplacera de 5 pixels à la fois.

✨ Vérifier la solution et pratiquer

Configurer les variables du jeu

Définissez les styles de police et les tailles de police pour afficher le score :

style_police = pygame.font.SysFont(None, 50)
police_score = pygame.font.SysFont(None, 35)
✨ Vérifier la solution et pratiquer

Configurer le bonus

Définissez la taille d'un bloc du bonus :

taille_bloc_bonus = 20
✨ Vérifier la solution et pratiquer

Définir des fonctions

Définissez les fonctions suivantes :

dessiner_le_serpent(taille_bloc_serpent, liste_serpent)

Cette fonction dessine le serpent sur l'écran :

def dessiner_le_serpent(taille_bloc_serpent, liste_serpent):
    for x in liste_serpent:
        pygame.draw.rect(
            écran, VERT, [x[0], x[1], taille_bloc_serpent, taille_bloc_serpent]
        )

Dans le code ci-dessus, pygame.draw.rect() est utilisé pour dessiner un rectangle sur l'écran. Le premier paramètre est l'écran, le second paramètre est la couleur et le troisième paramètre est la position et la taille du rectangle.

dessiner_le_bonus(x_bonus, y_bonus)

Cette fonction dessine le bonus sur l'écran :

def dessiner_le_bonus(x_bonus, y_bonus):
    pygame.draw.rect(
        écran, ROUGE, [x_bonus, y_bonus, taille_bloc_bonus, taille_bloc_bonus]
    )

Dans le code ci-dessus, pygame.draw.rect() est utilisé pour dessiner un rectangle sur l'écran. Le premier paramètre est l'écran, le second paramètre est la couleur et le troisième paramètre est la position et la taille du rectangle.

afficher_le_score(score)

Cette fonction affiche le score sur l'écran :

def afficher_le_score(score):
    valeur = police_score.render("Score: " + str(score), VRAI, BLANC)
    écran.blit(valeur, [10, 10])

Dans le code ci-dessus, score_font.render() est utilisé pour rendre le score sur l'écran. Le premier paramètre est le texte à afficher, le second paramètre est l'anti-aliasing et le troisième paramètre est la couleur du texte. screen.blit() est utilisé pour dessiner le texte sur l'écran. Le premier paramètre est le texte à afficher et le second paramètre est la position du texte.

boucle_principale_du_jeu()

Cette fonction contient la boucle principale du jeu :

def boucle_principale_du_jeu():
    ## Code de la boucle principale du jeu ici
✨ Vérifier la solution et pratiquer

Compléter le code de la boucle de jeu

Complétez la fonction boucle_principale_du_jeu() en ajoutant la logique du jeu à l'intérieur de la boucle while.

def boucle_principale_du_jeu():
    partie_terminee = False
    partie_perdue = False

    ## Configurer la position de départ du serpent
    x1 = LARGEUR / 2
    y1 = HAUTEUR / 2
    changement_x1 = 0
    changement_y1 = 0

    ## Configurer le corps du serpent
    liste_serpent = []
    longueur_serpent = 1

    ## Configurer le bonus
    x_bonus = round(random.randrange(0, LARGEUR - taille_bloc_bonus) / 20) * 20
    y_bonus = round(random.randrange(0, HAUTEUR - taille_bloc_bonus) / 20) * 20

    ## Configurer la boucle principale du jeu
    while not partie_terminee:
        while partie_perdue:
            écran.fill(COULEUR_FOND)
            message = style_police.render("Appuyez sur ESPACE pour recommencer", VRAI, JAUNE)
            écran.blit(message, [LARGEUR / 2 - 200, HAUTEUR / 2 - 50])
            pygame.display.flip()

            for événement in pygame.event.get():
                if événement.type == pygame.QUIT:
                    partie_terminee = True
                    partie_perdue = False
                if événement.type == pygame.KEYDOWN:
                    if événement.key == pygame.K_SPACE:
                        boucle_principale_du_jeu()

        for événement in pygame.event.get():
            if événement.type == pygame.QUIT:
                partie_terminee = True
            if événement.type == pygame.KEYDOWN:
                if événement.key == pygame.K_LEFT:
                    changement_x1 = -taille_bloc_serpent
                    changement_y1 = 0
                elif événement.key == pygame.K_RIGHT:
                    changement_x1 = taille_bloc_serpent
                    changement_y1 = 0
                elif événement.key == pygame.K_UP:
                    changement_y1 = -taille_bloc_serpent
                    changement_x1 = 0
                elif événement.key == pygame.K_DOWN:
                    changement_y1 = taille_bloc_serpent
                    changement_x1 = 0

        if x1 >= LARGEUR or x1 < 0 or y1 >= HAUTEUR or y1 < 0:
            partie_perdue = True

        x1 += changement_x1
        y1 += changement_y1
        écran.fill(COULEUR_FOND)
        pygame.draw.rect(
            écran, BLEU, [x_bonus, y_bonus, taille_bloc_bonus, taille_bloc_bonus]
        )

        tête_serpent = []
        tête_serpent.append(x1)
        tête_serpent.append(y1)
        liste_serpent.append(tête_serpent)
        if len(liste_serpent) > longueur_serpent:
            del liste_serpent[0]

        for x in liste_serpent[:-1]:
            if x == tête_serpent:
                partie_perdue = True

        dessiner_le_serpent(taille_bloc_serpent, liste_serpent)
        afficher_le_score(longueur_serpent - 1)

        pygame.display.flip()

        if x1 == x_bonus and y1 == y_bonus:
            x_bonus = round(random.randrange(0, LARGEUR - taille_bloc_bonus) / 20) * 20
            y_bonus = (
                round(random.randrange(0, HAUTEUR - taille_bloc_bonus) / 20) * 20
            )
            longueur_serpent += 1

        horloge.tick(vitesse_serpent)

    pygame.quit()

Dans le code ci-dessus, pygame.QUIT est utilisé pour quitter le jeu. pygame.KEYDOWN est utilisé pour vérifier si une touche est enfoncée. pygame.K_LEFT, pygame.K_RIGHT, pygame.K_UP et pygame.K_DOWN sont utilisés pour vérifier si les flèches gauche, droite, haut et bas sont enfoncées respectivement. pygame.draw.rect() est utilisé pour dessiner un rectangle sur l'écran. Le premier paramètre est l'écran, le second paramètre est la couleur et le troisième paramètre est la position et la taille du rectangle. pygame.display.flip() est utilisé pour mettre à jour l'écran. pygame.time.Clock() est utilisé pour suivre le temps dans le jeu. pygame.time.Clock.tick() est utilisé pour définir les FPS du jeu.

✨ Vérifier la solution et pratiquer

Lancer le jeu

Ajoutez ce qui suit à la fin du fichier pour lancer le jeu :

boucle_principale_du_jeu()
pygame.quit()

Enfin, basculez sur le bureau et exécutez le projet avec la commande suivante :

python snake_game.py
Commande d'exécution du jeu Snake
✨ Vérifier la solution et pratiquer

Résumé

Félicitations ! Vous avez réussi à créer un jeu de serpent avec Python et la bibliothèque Pygame. Dans ce projet, vous avez appris à configurer la fenêtre du jeu, à définir des couleurs, à dessiner le serpent et le bonus, à afficher le score et à implémenter la logique du jeu. Vous pouvez désormais exécuter le jeu et l'amuser.