Programmation Objet - TD - Sujet
Programmation Objet - TD - Sujet
Programmation Objet - TD - Sujet
Informatique
TD
Puissance 3
Page 1 sur 10
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet TD
A. Puissance 3 en POO
A.I. Contexte
Nous voilà sur le point de programmer un petit jeu de « Puissance 3 » en programmation objet. Mais
pour que ce soit plus fun, on aura le droit de retirer l’un des pions de la ligne du bas ☺
Ne vous lancez dans ce projet que si vous maîtrisez déjà Python. Sinon, d’autres projets sont à votre
disposition sur mon site ! Je donne bien moins d’indications sur la réalisation des codes quand dans les
autres TP.
Le jeu est gagné par la première équipe ayant aligné 3 pions de la même couleur. S’il y a égalité, c’est
le pion central le plus haut qui gagne, et s’il y a encore égalité, le plus à gauche !
Vous programmerez d’abord un jeu ne tenant pas automatiquement compte de toutes ces règles.
L’homme sera l’arbitre. Mais ensuite, vous pourrez les ajouter ! De même pour l’identification
automatique de réussite.
Page 2 sur 10
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet TD
A.III. Programmation
Soient les variables globales suivantes :
Taille = 5
L = H = Taille
dL = L/Taille
Taille sera à la fois le nombre de lignes et colonnes du plateau de jeu, et les dimensions sur x ( L) et
y (H) du plateau. Ainsi, chaque pion occupera une case carrée de côté 1.
dL sera la largeur d’un carré.
Attention : j’ai fait le choix de définir les lignes et colonnes à partir de 1. Il faudra penser à traiter listes
et array à partir de 0 !
Les pions seront des objets issus de la classe « pion » tels que :
𝑙 Ligne (de 1 à Taille) dans le plateau de jeu – Elle est initialisée à Taille (en haut)
Colonne (de 1 à Taille) dans le plateau de jeu – Elle sera définie dans les
𝑐
arguments de la méthode init
𝑥 Abscisse du centre du pion
Attributs Ordonnée du centre du pion
𝑦
𝑓𝑖𝑔 Numéro de la figure sur laquelle sera dessiné le pion
𝑗 Numéro du joueur (1 ou 2)
𝑐𝑜𝑙 Couleur du pion (Bleu si joueur 1 - Rouge si joueur 2)
Page 3 sur 10
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet TD
Vérifications :
Page 4 sur 10
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet TD
Nous allons maintenant créer une classe qui gère un plateau de jeu. A chaque ajout d’un pion, elle le
fera descendre jusqu’à ce qu’il touche soit le sol, soit le dernier pion posé. A chaque suppression d’un
pion par le bas, elle fera descendre tous les pions qui étaient au-dessus.
Remarques :
- Le tableau 𝑡𝑎𝑏 contiendra des 0 là où il n’y a aucun pion sur le plateau, et le numéro de l’équipe
du pion en ligne 𝑙 et colonne 𝑐 associées. Exemple :
Vous noterez que la ligne 0 est en bas sur le schéma, et en dans l’array associé
- La liste 𝐿𝑖𝑠𝑡𝑒_𝑃𝑖𝑜𝑛𝑠 permet de récupérer chaque colonne du problème. Dans l’exemple ci-
dessus, 𝐿𝑖𝑠𝑡𝑒_𝑃𝑖𝑜𝑛𝑠[0] est une liste vide, 𝐿𝑖𝑠𝑡𝑒_𝑃𝑖𝑜𝑛𝑠[1] contient dans l’ordre, le pion rouge,
puis le pion bleu etc
Page 5 sur 10
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet TD
Aides :
- plt.xticks(np.arange(min(Lx), max(Lx)+1, 1.0)) : Permet de redéfinir les
graduations de l’axe des abscisses entre le minimum de Lx et le maximum de Lx avec un pas
de 1
- plt.grid() : Affichage d’une grille
Page 6 sur 10
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet TD
Vérifications :
Vérifiez par ailleurs que les messages d’erreur « Colonne pleine » et « Rien à supprimer » fonctionnent.
Page 7 sur 10
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet TD
Il ne reste plus qu’à créer le jeu pour que tout soit géré automatiquement. En effet, à ce stade, vous
pouvez créer autant de plateau de vous voulez, et y ajouter autant de pions que vous le souhaitez.
La classe jeu va permettre de créer un plateau, et de faire jouer alternativement les deux équipes. Si
vous en avez le temps et l’envie, vous pourrez y intégrer les règles de jeu et la détection automatique
du gagnant.
Les pions seront des objets issus de la classe « pion » tels que :
Page 8 sur 10
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet TD
Remarque : oui, j’ai ajouté un argument à la méthode « croix » des pions pour mettre en évidence le
pion gagnant !
Un peu d’aide :
- On utilisera la table tab du plateau pour cette recherche
- Il ne faudra pas traiter les 4 coins
- Il faudra traiter les 4 lignes de bord à part et y rechercher un alignement parallèle au bord
- Pour les pions hors des bords, il suffira de vérifier 4 triples égalités le tout étant différent de 0
- Lorsqu’un alignement est identifié, on stocke dans un nouvel array Mat_Fin le joueur concerné
à la ligne et colonne du pion central de l’alignement et on passe une variable à True. Après les
avoir tous trouvés, on identifie celui qui est gagnant avec une double boucle for effectuée dans
le bon sens qui permet dès la première valeur non nulle de la matrice Mat_Fin de l’identifier
Page 9 sur 10
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet TD
Question 5: Améliorez la méthode « joue » pour qu’elle interdise les actions que la
règle n’autorise pas – Chaque coup interdit sera un coup perdu (changement de joueur)
Un peu d’aide :
- Il faudra stocker la colonne du/de la dernier(e) ajout/suppression pour voir si on tente l’action
opposée sur la même colonne au coup suivant, condition nécessaire de l’interdiction de jeu
- Il faudra être en mesure d’identifier si une colonne ne contient que des pions d’un seul joueur
- Il faudra faire en sorte de récupérer la couleur du dernier pion supprimé en renvoyant le joueur
associé dans les méthodes « supprime » de jeu et « enleve » de plateau
- Il faudra avoir en mémoire le joueur du dernier pion qui a été soit supprimé, soit ajouté
- Selon certaines conditions, il faudra alors comparer ce joueur au joueur associé à la prochaine
suppression possible ou au prochain ajout à la colonne concernée
- A chaque action impossible (colonne c=0, c<-Taille, c>Taille), le tour est perdu et un message
« Impossible » est affiché dans la console
- Que l’action soit impossible, interdite ou que la colonne soit vide avec essai de suppression,
ou pleine avec essai d’ajout, on réinitialise la colonne précédente pour que l’action suivante
soit libre - En réalité, il n’est pas nécessaire de traiter le cas où un ajout n’a pas réussi car la
colonne est pleine. En effet, elle ne peut être pleine avec uniquement une couleur sans que le
jeu ne soit gagné…
-
Bref, je crois que vous comprendrez tout cela si vous avez bien réfléchi au problème ! Un peu
compliqué à réaliser, mais possible…
Page 10 sur 10