
Miaouno
- Python
- Pygame
- Projet IUT
Miaouno est un jeu de Uno multijoueur en réseau avec interface graphique développé en Python avec Pygame. Développé dans le cadre du module "Structure de données" de la 2e année de BUT, il avait pour objectif de nous faire manipuler des structures avancées comme des piles, des files, ou des arbres
Aperçu du projet
Contexte
Projet de 2e année de BUT Informatique réalisé en duo visant à implémenter des structures de données (listes chaînées, piles, files, arbres) à travers un jeu de Uno revisité sur le thème des chats. Le projet inclut un mode multijoueur en LAN et une interface graphique développée avec Pygame.
Architecture et fonctionnement
Gestion des états
Le GameStateManager gère les différents états du jeu via une pile (menus, partie, navigation). Chaque état implémente update et render, ce qui permet une navigation fluide entre les écrans.
GameSession
La GameSession fait le lien entre la logique du jeu, le réseau et l'affichage. Elle instancie une HostSession ou une ClientSession selon le rôle du joueur.
Boucle principale
La boucle principale récupère le GameState au sommet de la pile et exécute en continu update et render, ce qui pilote l'ensemble du jeu.
Réseau
Le jeu fonctionne en LAN avec un système host/client. Les hosts sont détectés via broadcast UDP et les échanges de données se font en TCP. Le host gère la partie et la synchronisation des joueurs, tandis que le client rejoint et échange les actions de jeu.
Logique de jeu et interface
La classe Uno gère toute la logique métier indépendamment du réseau et de l'interface. L'interface graphique est développée avec Pygame et repose sur des composants réutilisables avec une mise à jour dynamique via le pattern Observer.
Multithreading
Des threads sont utilisés pour séparer le réseau et l'interface afin d'éviter les blocages. Une synchronisation est mise en place pour gérer les accès concurrents aux données.
Ce que ce projet m'a apporté
Ce projet m'a permis de renforcer mes compétences en Python et en architecture logicielle, notamment la séparation entre logique métier, réseau et interface graphique. J'ai approfondi la gestion d'un système d'états, la mise en place d'un système client/serveur en TCP/UDP, la conception d'une interface modulaire avec Pygame, ainsi que la gestion de la concurrence via les threads et la synchronisation. Il m'a également appris à structurer un projet complexe en équipe.
Compétences du BUT Informatique mobilisées
C1 - Réaliser
Développement d'une application complète de jeu multijoueur en Python, de l'architecture logicielle jusqu'à l'interface graphique avec Pygame.
C2 - Optimiser
Conception de structures de données adaptées au jeu (pile pour les GameStates, structures pour la logique du Uno) et choix d'une architecture permettant une exécution fluide malgré le réseau.
C3 - Administrer
Mise en place d'une architecture réseau LAN en modèle client/serveur avec découverte des hosts en UDP et échanges de données en TCP.
C4 - Gérer
Ce projet ne reposait pas sur une base de données, cette compétence a donc été peu mobilisée.
C5 - Conduire
Analyse des besoins du projet en binôme et définition d'une architecture répondant aux contraintes fonctionnelles (multijoueur, UI, synchronisation).
C6 - Collaborer
Réalisation du projet en binôme avec répartition des tâches et coordination sur les choix techniques et l'intégration des composants.