Mini-Jeux & Algorithmes

Développement de logique de jeu avec Python et Pygame

Retour au portfolio

Le Contexte

Ce projet regroupe deux applications développées pour maîtriser la bibliothèque Pygame et renforcer ma compréhension de l'algorithmique en Python. L'objectif n'était pas seulement d'afficher des graphismes, mais de gérer des boucles d'événements complexes et des structures de données dynamiques.

J'ai réalisé un jeu de hasard simple (Coinflip) pour comprendre la gestion des inputs souris, et une réplique du célèbre 2048 pour travailler sur la manipulation de matrices et la logique de fusion des tuiles.

1. Le Projet 2048

Une réplique complète du jeu de puzzle mathématique.

  • Logique Matricielle : Gestion d'une grille 4x4 sous forme de liste de listes.
  • Algorithme de Fusion : Création de la fonction compress_and_merge qui déplace les tuiles et additionne les valeurs identiques.
  • Transposition : Utilisation astucieuse de zip(*grid) pour réutiliser la logique de déplacement "Gauche" pour les directions Haut, Bas et Droite.
  • Dictionnaire de Couleurs : Attribution dynamique des couleurs RGB selon la valeur de la tuile (de 2 à 2048).

Aperçu Interface (2048)

2
4
8
2
2048
4
2

Rendu simulé de la grille 4x4

Aperçu Interface (Coinflip)

Coinflip Game
Pile
Face
Gagné ! C'était Pile

Gestion des clics et affichage conditionnel

2. Le Projet Coinflip

Un simulateur de Pile ou Face interactif.

  • Interactivité Souris : Utilisation de pygame.MOUSEBUTTONDOWN et de la méthode rect.collidepoint(event.pos) pour détecter les clics précis sur les boutons.
  • Rendu Conditionnel : Affichage dynamique du résultat ("Gagné" en vert ou "Perdu" en rouge) selon le choix de l'utilisateur comparé au random.choice.
  • Boucle de Jeu : Structure classique Pygame avec gestion du rafraîchissement d'écran (display.flip()).

Stack Technique & Outils

  • Python Python : Langage Core
  • Pygame Pygame : Moteur 2D
  • Maths : Matrices & Random
  • Git Git : Versioning

Défis Techniques & Solutions

🔄 La rotation de matrice (2048)

Le plus grand défi du 2048 était d'éviter de réécrire la logique de fusion pour les 4 directions (Haut, Bas, Gauche, Droite). J'ai implémenté une solution élégante en utilisant la transposition de matrice avec zip(*grid).

Par exemple, pour aller vers le Haut, le programme transpose la grille (les lignes deviennent des colonnes), applique le mouvement vers la "Gauche" (logique de base), puis transpose à nouveau la grille pour revenir à l'état normal. Cela réduit drastiquement la duplication de code.

🖱️ Gestion des événements (Coinflip)

Sur Coinflip, il fallait détecter précisément où l'utilisateur cliquait. J'ai utilisé les objets Rect de Pygame. La méthode pile_rect.collidepoint(event.pos) permet de vérifier instantanément si les coordonnées de la souris au moment du clic se trouvent à l'intérieur du bouton "Pile". C'est la base de toute interface utilisateur graphique (GUI).