Snake
Remarque
Requis : session 5 terminée.
Le serpent avance tout seul. Toi, tu le diriges avec les flèches. Mange un fruit : le serpent grandit d’une case. Touche le mur ou toi-même : game over.
Démarrage
Télécharge le code de départ et décompresse le ZIP. Ouvre main.py dans Thonny et clique sur Run. Tu vois une grille vide. Les commandes et le chronométrage sont déjà en place. C’est toi qui remplis les fonctions nieuw_fruit(), zet_stap() et teken().
Comment ça marche ?
Snake se joue sur une grille. Le serpent est une liste de coordonnées (kolom, rij). À chaque pas, tu ajoutes une nouvelle tête à l’avant de la liste et tu supprimes le dernier élément. Si le serpent mange un fruit, tu laisses le dernier élément en place : c’est comme ça qu’il grandit.
TILE = 20 # taille d'une case en pixels
COLS = WIDTH // TILE
ROWS = HEIGHT // TILE
slang = [(10, 10), (9, 10), (8, 10)] # liste de (kolom, rij)
dx, dy = 1, 0 # direction : 1 pas vers la droiteCharger et redimensionner des images
Les images de fruits font 64×64 pixels. C’est trop grand pour une case de 20×20. Tu les charges avec pygame.image.load() et tu les redimensionnes ensuite avec pygame.transform.scale(). Tout ça est déjà écrit dans le code de départ.
surf = pygame.image.load('images/apple.png').convert_alpha()
fruit_images['apple'] = pygame.transform.scale(surf, (TILE, TILE))convert_alpha() fait en sorte que la transparence de l’image fonctionne correctement. pygame.transform.scale() renvoie une nouvelle Surface à la taille demandée. L’original ne change pas.
Pour afficher une image redimensionnée à l’écran, tu utilises screen.blit() :
screen.blit(fruit_surf, (fruit_pos[0] * TILE, fruit_pos[1] * TILE))✅ Basic
- Remplis
nieuw_fruit(): choisis un fruit au hasard, cherche une case libre et enregistre la position et la Surface. - Remplis
zet_stap(): calcule la nouvelle tête, ajoute-la à l’avant de la liste, supprime le dernier élément. - Remplis
teken(): dessine la grille (pygame.draw.line), le fruit (screen.blit) et chaque anneau du serpent (pygame.draw.circle). Affiche le score avecfont.render()etscreen.blit(). - Fais apparaître un fruit quand le serpent en mange un : saute
slang.pop()et appellenieuw_fruit().
⭐ Stretch
- Game over si la tête sort de la grille.
- Game over si la tête touche un de ses propres segments (
nieuw_hoofd in slang[1:]). - Affiche un écran de game over avec le score. Appuie sur R pour recommencer.
🔥 Expert
- Augmente la vitesse à mesure que le score monte : baisse
STAP_MSselon le score (max(60, BASISINTERVAL - score * 10)). - Enregistre le meilleur score et affiche-le à côté du score actuel, même après un redémarrage.
- Fais en sorte qu’un fruit ne puisse jamais apparaître sur une case déjà occupée par le serpent.
Téléchargements
- Code de départ :
main.pyavec les commandes et le chronométrage prêts ; c’est toi qui remplis les fonctions. - Images de fruits : si tu commences sans le code de départ (déjà inclus dans le ZIP de départ).
Fruits : Kenney Food Kit, CC0 (domaine public). kenney.nl