Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Programmation Objet - TD - Sujet

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 10

Dernière mise à jour Informatique Denis DEFAUCHY

24/12/2021 Programmation objet TD

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.

A.II. Règles du jeu


Les équipes jouent un pion l’une après l’autre.
Evidemment :
- On peut ajouter un pion sur l’une des 5 colonnes tant qu’elle n’est pas pleine. Dans le cas
contraire, le tour est perdu
- On ne peut retirer des pions que s’il y en a dans la colonne concernée. Dans le cas contraire,
le tour est perdu
Mais aussi, tout jeu induisant un plateau identique après deux coups à la suite est interdit :
- Suppression d’un pion dans une colonne ayant un ou plusieurs pions de la même couleur et
dans laquelle on vient d’ajouter un pion de cette couleur au coup précédent
- Ajout d’un pion dans une colonne ayant 0, 1 ou plusieurs pions de la même couleur et dans
laquelle on vient de supprimer un pion de cette couleur au coup précédent
Remarque : tout essai de coup interdit fait perdre son tour

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 !

A.III.1 Classe Pion

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)

Nom Arguments Description


Numéro de la figure
fig sur laquelle afficher
le pion
« magic method » qui crée les attributs
init Numéro du joueur (1
j du pion
ou 2)
Colonne où le pion
c
sera positionné
« magic method » qui permet de
Méthodes repr RAS renvoyer la ligne et la couleur d’un pion
quand on « l’appelle »
Affiche le pion sur le plateau de jeu à ses
affiche RAS
coordonnées
efface RAS Efface le pion de la figure
Déplace le pion d’une case vers le bas,
deplace RAS l’efface de la case précédente et l’affiche
à sa nouvelle case
Trace une croix noire dans les diagonales
croix RAS
du carré du pion

Page 3 sur 10
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet TD

Question 1: Créer la classe pion et vérifiez les exemples ci -dessous.


Aides :
- plt.fill(Lx,Ly,Col) trace un contour et colorie l’intérieur de celui-ci
- plt.axis('scaled') permet d’avoir un affichage orthonormé en redimensionnant la
fenêtre d’affichage – A placer avant xlim et ylim
- plt.figure(1) permet d’ouvrir une figure 1 (qu’elle existe ou non)
- plt.pause(0.001) permet d’arrêter quelques millisecondes l’affichage d’une figure afin
qu’elle se mette à jour. Sans ça, dans un while par exemple, la figure reste vide…
- A chaque modification d’une méthode, il faut évidemment exécuter votre code, mais aussi
recréer l’objet pour qu’il bénéficie des modifications
- Dans repr : Ecrire return et non print, et l’argument est une unique chaine de caractères

Vérifications :

Code dans la console Résultat

Avec la fenêtre précédente ouverte :

Si le contour reste, votre version de pyzo/python


est ancienne. Ajoutez l’option edgecolor= 'w'
à plt.fill (cf help)
Fermer la fenêtre ouverte, puis :

Avec la fenêtre précédente ouverte :

Avec la fenêtre précédente ouverte :

Page 4 sur 10
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet TD

A.III.2 Classe Plateau

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.

𝑓𝑖𝑔 Numéro de la figure associé au plateau


Tableau de forme array de numpy
𝑡𝑎𝑏
Attributs contenant au départ des zéros partout
Liste de liste contenant au départ autant
𝐿𝑖𝑠𝑡𝑒_𝑃𝑖𝑜𝑛𝑠
de listes vides qu’il y a de colonnes

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

Nom Arguments Description


i : Numéro de plateau (de
init « magic method » qui crée les attributs
figure donc)
Crée un pion au joueur j sur le plateau i à
j : Numéro du joueur du
la colonne c, l’affiche (en haut), et le fait
pion qui sera ajouté
tomber (appelle la méthode tombe qui
sera programmée ensuite), tout en
ajoute
mettant à jour les attributs Tab et
c : Numéro de colonne où
Liste_Pions
sera ajouté le pion
N’ajoute pas de pion et indique « Colonne
Méthodes pleine » si tel est le cas
Fait tomber le pion pi jusqu’en bas du
tombe pi : Pion à faire tomber plateau si aucun pion dans la colonne,
sinon jusqu’au-dessus du pion précédent
Enlève (de la figure et des attributs) le
pion le plus bas de la colonne c s’il existe
c : Colonne où le pion du
enleve et fait descendre un à un tous les pions
bas sera retiré
supérieurs s’ils existent. Affiche le
message « Rien à supprimer » sinon
Affiche le plateau de jeu avec des
affiche RAS
contours épais

Question 2: Créer la classe plateau et vérifiez les exemples ci -dessous.

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 :

Code dans la console Résultat

Depuis la situation précédente

Depuis la situation précédente

Depuis la situation précédente

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

A.III.3 Classe jeu

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 :

𝑝𝑙 Un plateau (objet créé par la classe plateau)


Attributs
𝑓𝑖𝑛𝑖 Booléen initialisé à False et qui deviendra True dès qu’il y a un gagnant

Nom Arguments Description


« magic method » qui crée les attributs du pion,
init RAS
soit un plateau, et qui l’affiche
Choisi aléatoirement la première équipe qui
joue, demande la colonne dans la console,
attend qu’un chiffre soit entrée, entre 1 et Taille
(ajout à la colonne associée) ou entre -1 et -
Taille (supprime le pion du bas à la colonne
associée) sur le plateau pl. Tour perdu si
joue RAS impossible (colonne vide, pleine, ou chiffre en
dehors de l’intervalle correct)
Demande successivement aux deux joueurs de
procéder ainsi…
Méthodes
Je jeu à lieu tant que l’attribut « fini » vaut False
– Cet attribut est constamment mis à jour par la
méthode fin
j : Numéro du joueur
du pion qui sera
Ajoute le pion au plateau, l’affiche et le fait
ajoute ajouté
tomber, s’il y a lieu (cf méthode ajoute de pl)
c : Colonne où le pion
sera ajouté
c : Colonne où le pion Supprime le pion du bas du plateau pl à la
supprime
du bas sera retiré colonne c
Maintien l’attribut fini à False jusqu’à ce qu’il y
fin RAS ait un gagnant. Dans un premier temps, vous
maintiendrez l’attribut fini à False tout le temps

Question 3: Créer la classe jeu et … jouez ☺ en respectant les règles et en identifiant


par vous-même qui a gagné

Page 8 sur 10
Dernière mise à jour Informatique Denis DEFAUCHY
24/12/2021 Programmation objet TD

Si vous en avez l’envie et le temps

Attention, c’est assez long et complexe à programmer !

Question 4: Programmez la méthode « fin » afin qu’elle détermine le gagnant – Elle


affichera une croix sur le pion central parmi les 3 pions alignés de chaque alignement
en indiquant dans la console « Alignement détecté » pour chacun, puis déterminera
celui qui est gagnant – Elle indiquera dans la console la couleur d u joueur associée,
puis le jeu prendra fin

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

Vous aimerez peut-être aussi