Objectif pédagogique
Dans cette activité, vous allez :
- Comprendre les bases de la programmation avec Python et Pygame.
- Apprendre à utiliser des concepts comme les listes, les conditions, et les opérateurs.
- Développer un jeu simple et le personnaliser avec des améliorations guidées.
Concepts clés à comprendre
1. Les listes
Une liste est une structure de données qui permet de stocker plusieurs valeurs dans une seule variable. Par exemple :
ma_liste = [1, 2, 3, 4]
Dans le code du Snake, la liste snake_list est utilisée pour stocker toutes les positions du serpent. À chaque déplacement, une nouvelle position est ajoutée à la liste, et l'ancienne est supprimée si la longueur du serpent reste la même.
2. L'opérateur % (modulo)
L'opérateur % renvoie le reste d'une division. Par exemple :
7 % 3 # Résultat : 1 (car 7 divisé par 3 donne 2 avec un reste de 1)
Dans le jeu, le % peut être utilisé pour vérifier si un nombre est divisible par un autre. Par exemple, si vous voulez augmenter la vitesse du jeu tous les 5 points :
if score % 5 == 0:
snake_speed += 1
Code de base : Jeu Snake
Voici le code de base du jeu Snake. Lisez-le attentivement et essayez de comprendre son fonctionnement.
import pygame
import random
import sys
# Initialisation de Pygame
pygame.init()
# Dimensions de l'écran
SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Snake - Code de base")
# Couleurs
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
# Taille du serpent et vitesse
snake_block = 20
snake_speed = 15
# Police pour le score
font_style = pygame.font.SysFont("bahnschrift", 25)
# Fonction pour afficher le score
def display_score(score):
value = font_style.render(f"Score: {score}", True, BLACK)
screen.blit(value, [10, 10])
# Boucle principale du jeu
def game_loop():
game_over = False
game_close = False
# Position initiale du serpent
x1, y1 = SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2
x1_change, y1_change = 0, 0
# Corps du serpent
snake_list = []
length_of_snake = 1
# Position initiale de la nourriture
foodx = round(random.randrange(0, SCREEN_WIDTH - snake_block) / 20.0) * 20.0
foody = round(random.randrange(0, SCREEN_HEIGHT - snake_block) / 20.0) * 20.0
clock = pygame.time.Clock()
while not game_over:
while game_close:
screen.fill(WHITE)
message = font_style.render("Game Over! Appuyez sur C pour rejouer ou Q pour quitter", True, RED)
screen.blit(message, [SCREEN_WIDTH // 6, SCREEN_HEIGHT // 3])
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_over = True
game_close = False
if event.key == pygame.K_c:
game_loop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -snake_block
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block
x1_change = 0
# Vérifier si le serpent touche les bords
if x1 >= SCREEN_WIDTH or x1 < 0 or y1 >= SCREEN_HEIGHT or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
screen.fill(WHITE)
# Dessiner la nourriture
pygame.draw.rect(screen, GREEN, [foodx, foody, snake_block, snake_block])
# Ajouter la tête du serpent
snake_head = [x1, y1]
snake_list.append(snake_head)
if len(snake_list) > length_of_snake:
del snake_list[0]
# Vérifier si le serpent se mord lui-même
for block in snake_list[:-1]:
if block == snake_head:
game_close = True
# Dessiner le serpent
for block in snake_list:
pygame.draw.rect(screen, BLACK, [block[0], block[1], snake_block, snake_block])
# Vérifier si le serpent mange la nourriture
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, SCREEN_WIDTH - snake_block) / 20.0) * 20.0
foody = round(random.randrange(0, SCREEN_HEIGHT - snake_block) / 20.0) * 20.0
length_of_snake += 1
# Afficher le score
display_score(length_of_snake - 1)
pygame.display.update()
clock.tick(snake_speed)
pygame.quit()
sys.exit()
# Lancer le jeu
game_loop()
Étape 1 : Comprendre le code
Répondez aux questions suivantes :
- Que fait la liste
snake_list? - Que se passe-t-il lorsque le serpent mange la nourriture ?
- Comment le jeu détecte-t-il que le joueur a perdu ?
- Que fait la fonction
display_score()? - À quoi sert la variable
length_of_snake?
Étape 2 : Ajouter des améliorations
Choisissez une ou plusieurs améliorations :
- Ajouter des obstacles : Ajoutez des blocs rouges que le serpent doit éviter.
- Augmenter la vitesse : Faites en sorte que la vitesse augmente tous les 5 points.
- Mode infini : Permettez au serpent de traverser les bords de l'écran.
Étape 3 : Tester et présenter
Testez vos modifications et expliquez ce que vous avez ajouté.