PYTHON : PROJETS 2026

Tous les projets proposés sur cette page mettent en oeuvre la réalisation d'une application complète, qui inclut à la fois des entrées/sorties sur fichier (par exemple pour stocker la configuration d'un jeu ou le tableau des meilleurs scores) et une interface homme/machine pilotée au clavier et/ou à la souris. Ces projets vont donc nécessairement avoir besoin d'un certain nombre de modules de la bibliothèque standard fournie avec le langage Python.

Avant de commencer, il est donc très utile de bien étudier et comprendre l'ensemble des codes sources fournis dans les exemples vus en cours, ainsi que dans les solutions des exercices vus en TD, qui fournissent des points de départ pour le code à réaliser. En particulier, l'utilisation des modules ezCLI et ezTK est OBLIGATOIRE car cela va vous permettre de gagner beaucoup de temps sur la réalisation et la finalisation du code. L'utilisation d'autres bibliothèques (PyGame, TkInter, etc) entraînera automatiquement un 0 pour la note du projet. Pour chacun des sujets, sont indiqués les exemples et les exercices qui pourront vous servir de point de départ.

A partir de la semaine 18 (27 avril), un créneau de 1h20 de TD chaque semaine sera exclusivement consacrés au suivi du projet de programmation. Il est donc primordial que les 2 membres du binôme soient présents simultanément. Les 2 membres du binôme doivent OBLIGATOIREMENT appartenir au même groupe de TD. La présence à ces séances de suivi est OBLIGATOIRE et toute absence non justifiée sera fortement sanctionnée par une pénalité d'un tiers par absence sur la note finale du projet (coefficient 0.66 pour une absence, 0.33 pour deux et 0 pour trois). L'avancée de votre projet entre chaque créneau de suivi participera à votre notation. Un projet qui avance peu durant les trois semaines de suivi partira avec un malus.

Projet 1 : Sequence

Ecrire un programme sequence qui implémente une variante du jeu électronique Simon, dans laquelle le joueur doit reproduire une séquence de données aléatoires, dont la longueur est incrémentée à chaque tour de jeu. Dans le jeu original, la séquence était constituée de couleurs choisies dans un ensemble de quatre couleurs (rouge, vert, bleu, jaune). Une reproduction fidèle de cette version initiale peut être jouée en ligne en cliquant sur ce lien.

Dans la variante demandée pour ce projet, le jeu est nettement plus complexe. L'objectif pour le joueur est de mémoriser et reproduire une séquence ordonnée de cases choisies aléatoirement dans une grille rectangulaire. La taille de la grille, ainsi que le nombre de symboles différents pour chaque case est configurable par le joueur. A chaque tour de jeu, le programme visualise les symboles sélectionnées dans l'ordre de la séquence, en modifiant l'icône affichée sur chaque case de la séquence durant un temps limité. Le joueur doit ensuite cliquer sur ces cases dans le même ordre, en utilisant à chaque fois, la bonne combinaison entre les touches du clavier et les boutons de la souris. En cas de succès, le programme allonge la séquence en y ajoutant une case et un symbole aléatoire, et le processus continue tant que le joueur arriver à reproduire la séquence sans erreur. L'image ci-dessous présente un exemple d'une interface graphique possible pour le jeu :


Dans la version la plus simple du jeu, la grille est limitée à 3 lignes, 6 colonnes et 1 seul symbole est utilisé. Dans la version la plus complexe, la grille possède 6 lignes, 12 colonnes et 6 symboles différents sont utilisés pour les éléments de la séquence. Pour différencier ces 6 symboles, l'utilisateur devra cliquer sur les cases avec le bouton gauche ou le bouton droit de la souris, en combinant éventuellement avec les touches CONTROL ou SHIFT. Un aide-mémoire sera affiché sous la grille pour permettre au joueur de savoir quelle combinaison de touches correspond à chaque symbole (cf. copie d'écran ci-dessus).

Enfin, le programme devra également implémenter une sauvegarde sur fichier des 10 meilleurs scores réalisés pour chacune des configurations de jeu (même taille de grille et même nombre de symboles). Pour cela, l'idéal est d'utiliser un fichier au format INI tel qu'on l'a vu en cours. Eventuellement vous pouvez envisager de crypter ce fichier, afin qu'un joueur ne puisse pas tricher en modifiant le fichier directement à l'aide d'un éditeur de texte.

Pour simplifier le développement du programme, on fournit une archive sequence.zip qui contient les images des smileys utilisés pour les différents symboles des cases. Les images sont au format PNG, mais comme certaines versions de MacOS n'affichent pas correctement les images PNG, j'ai également rajouté les mêmes images au format GIF. L'archive contient également un fichier squelette sequenceZ.py qui pourra servir de point de départ pour l'implémentation.

Exemples à relire avant de commencer le projet :
  1. Exemple C5C_win.py (pour l'alternance entre fenêtre de configuration et fenêtre de jeu)
  2. Exemple C2C_toggle.py (pour le changement d'état automatique des case de la grille)
  3. Exemple C6B_event.py et Exercice C5A_leapfrog.py (pour la gestion des boutons de la souris)
  4. Exemple B5A_inifile.py et B6_scores.py (pour la lecture/écriture des fichiers de scores)

Projet 3 : Sliding Rows

Ecrire un programme SlidingRows qui implémente une variante du classique "Puissance 4" (ou "Connect 4", en anglais), un jeu à 2 joueurs associant le mécanisme du morpion (chaque joueur doit aligner une série de pions sur une même ligne horizontale, verticale ou diagonale) avec les contraintes de la gravité. La version standard du jeu, offrant une interface proche de celle demandée dans le cadre du projet, peut être testée en ligne sur Web-Games-Online, en cliquant sur l'image ci-dessous :


Le programme à réaliser doit implémenter une variante du jeu, appelée Sliding Rows dont la complexité tactique est nettement plus élevée. Cette variante diffère de la version standard sur deux points spécifiques : Du point de vue de l'implémentation, les deux difficultés algorithmiques concernent d'une part, la détection des alignements de 4 pions, et d'autre part, la mise en oeuvre du renversement de la grille. Si l'on représente le pion du joueur A par la valeur 1, le pion du joueur B par la valeur -1, et une case vide par la valeur 0, il est possible de détecter un alignement simplement en faisant la somme des valeurs de 4 cases adjacentes, puisque cette somme vaudra 4 pour un alignement du joueur A, et -4 pour un alignement du joueur B. Sur une grille 7x6, le nombre d'alignements possibles est facile à calculer: 24 alignements horizontaux, 21 alignements verticaux et 24 alignements diagonaux. On peut donc identifier une fois pour toute, la liste des alignements impliqués pour chacune des 42 cases de la grille, et créer un lien entre les deux, ce qui permettra une détection des alignements très efficace. Pour obtenir un historique des parties jouées, on implémentera une sauvegarde sur fichier des 10 meilleurs scores réalisés (nombre de coups pour gagner) pour chacune des configurations de jeu (dépendant de la taille de la grille).

Projet 3 : Visualisation de parties d'échecs

Le jeu d'échecs est très certainement le jeu de stratégie qui a été le plus étudié parmi tous les jeux de société. Pour archiver les parties jouées ou retranscrire les études théoriques sur les différentes positions, un standard international pour le stockage informatique a été défini : le format PGN (Portable Game Notation) qui est décrit en détail sur cette page Wikipedia. Le format PGN est un simple fichier texte décomposé en 2 parties: une entête qui donne des informations générales telles que les noms des joueurs, la date et le lieu de la partie, et un corps qui donne la séquence des coups joués, en incluant des commentaires sous une forme normalisée, parfois accompagnés de l'étude d'une ou plusieurs variantes des coups possibles pour certaines positions. La page Wikipedia cité ci-dessus donne deux exemples du contenu habituel d'un fichier PGN. Il faut noter qu'un même fichier PGN peut contenir plusieurs parties, simplement en les concaténant les unes derrière les autres. Il existe sur le web de nombreux sites stockant parfois plusieurs dizaines de milliers de parties d'échecs retranscrites au format PGN. Par exemple, le site PGN Mentor propose de nombreux fichiers contenant chacun plusieurs centaines de parties, classés par joueur ou par tournoi.



L'objectif du projet est d'écrire un programme chess qui permet de lire un fichier PGN, fourni par l'utilisateur, et de visualiser la (ou les) partie(s) qu'il contient, soit coup par coup, soit sous la forme d'une animation automatique. Le choix des options de visualisation, des commandes d'interaction, ainsi que de l'organisation de la fenêtre graphique est laissé totalement libre. Vous pouvez vous inspirer du mode "view" disponible sur le site PGN Mentor mentionné ci-dessus, qui donne une bonne illustration du type d'interface souhaitée pour le projet. Pour la visualisation de l'échiquier, l'utilisation de la widget "Canvas" est conseillée, car elle permet de simplifier l'animation du déplacement des pièces entre la case de départ et la case d'arrivée. Enfin, pour la représentation graphique des pièces d'échecs, il existe de nombreuses collections d'images sur le web. On fournit une archive chess.zip qui contient les images, au format PNG, des 12 pièces différentes nécessaires (cf. image ci-dessus), mais vous pouvez évidemment en utiliser une autre, voire permettre à l'utilisateur de choisir entre plusieurs thèmes pour le design des pièces affichées.

Exemples à relire avant de commencer le projet :
  1. Exemple C7A_canvas.py (pour l'utilisation générale de la widget Canvas)
  2. Exemple B2A_txtfile.py (pour la lecture/écriture de fichiers texte)
  3. Exemple C4B_random.py (pour l'utilisation de la widget Entry)
  4. Exemple C5D_win.py (pour l'utilisation du sélecteur de fichier)

Projet 4 : Tracé de trochoïdes

Dans sa définition la plus générale, une "trochoïde" est une courbe 2D qui représente le mouvement d'un point situé sur un cercle qui roule (sans glissement) le long d'une autre forme géométrique. Parmi ces courbes, il existe deux familles particulièrement intéressantes obtenues lorsque le cercle roule à l'extérieur ou à l'intérieur d'un autre cercle (on parle respectivement d'épitrochoïdes et d'hypotrochoïdes). Ces deux familles de courbes ont été popularisées pour le grand public par le jeu Spirograph inventé au milieu des années 1960.

La page Wikipedia consacrée au Spirograph fournit quelques informations sur les équations paramétriques permettant de décrire la forme d'une trochoïde, mais le plus simple est d'aller directement sur les pages Wikipedia concernant les épitrochoïdes et les hypotrochoïdes qui présentent les différentes formes de ces équations paramétriques. De même, une application proche de celle qui est demandée dans ce projet, peut être testée en ligne sur ArtByLogic. Une version plus complexe, permettant de généraliser le principe avec un nombre arbitraire de cercles, est accessible sur SeedCode

Le but du projet est d'écrire un programme Spiro, basé sur une widget Canvas, permettant la création interactive de telles figures géométriques. Le mode opératoire souhaité doit permettre à l'utilisateur de choisir les paramètres de la trochoïde. Au minimum, il faut définir la taille et la position du cercle fixe, la taille et la position initiale du cercle mobile (qui peut être à l'intérieur ou à l'extérieur du cercle fixe) et enfin, la position du point dont on veut tracer le mouvement. Une fois les paramètres spécifiés, le programme n'a plus qu'à évaluer les équations paramétriques en faisant varier le paramètre t pour obtenir un tracé de la courbe résultante. Pour augmenter la complexité des courbes, au lieu d'utiliser des paramètres fixes, on peut fournir pour chaque paramètres une borne supérieure et une borne inférieure et faire varier (avec une vitesse à définir) la valeur de chaque paramètre entre ces deux bornes au cours du tracé.

Le choix des options de visualisation, des commandes d'interaction, ainsi que de l'organisation de la fenêtre graphique est laissé totalement libre. Néanmoins, on peut énumérer un certain nombre de fonctionnalités qu'il serait souhaitable d'y voir figurer :
  1. Définir la couleur du tracé, et éventuellement son épaisseur ou son type (trait continu, tirets, pointillés, etc)
  2. Permettre de tracer plusieurs trochoïdes en superposition, en faisant varier progressivement le point de départ entre deux positions-limites définies par l'utilisateur
  3. Remplacer le cercle fixe par d'autres formes géométriques
  4. et bien sûr, n'hésitez pas à rajouter au programme toute fonctionnalité qui vous semblerait intéressante...
Exemples et Exercices conseillés pour servir de point de départ :
  1. Exemple C4A_random.py (pour l'utilisation des widgets Scale)
  2. Exemple C4B_random.py (pour l'utilisation des widgets Entry)
  3. Exemple C7A_canvas.py (pour l'utilisation de la widget Canvas et notamment la gestion du tracé de courves dans un Canvas)
Philippe Blasi