Le jeu Puissance Quatre
Voici encore un jeu de plateau : le jeu Puissance 4. Deux joueurs s’affrontent sur un plateau de jeu
vertical : ils glissent a tour de r ` ole un pion, marqu ˆ e d’un rond ou d’une croix selon le joueur. Lorsqu’un ´
joueur pose un pion dans une colonne, le plateau etant vertical, le pion tombe jusqu’ ´ a toucher le fond de `
la colonne ou un autre pion dej´ a pr ` esent dans la colonne. ´
L’objectif pour chaque joueur est d’aligner (horizontalement, verticalement ou en diagonale) quatre
pions lui appartenant.
Nous allons reprendre la structure du jeu du taquin que nous avons vu en cours et qui est disponible
sur Moodle pour l’adapter au jeu de puissance 4. Recup ´ erez ce fichier si vous ne l’avez pas d ´ ej´ a`
fait, et remonnez le puissance4.py. Nous allons re´ecrire la classe ´ Taquin en une nouvelle classe
PuissanceQuatre.
Le programme principal est maintenant :
### script principal
On remarque que la variable joueur qui represente un joueur varie entre ´ 0 et 1. On observe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 if __name__ == __main__ : p4 = PuissanceQuatre() joueur = random.randint(0,1) while not p4.partie_finie(): print(p4) print("Aux",p4.carac(joueur),"de jouer") choix = int(input("Dans quelle colonne voulez-vous jouer ? ")) res = p4.pose_colonne(choix,joueur) if not res : print("Non, ce nest pas possible.") else : joueur = (joueur+1)%2 print(p4) print("Partie finie. Bravo")
egalement que la classe ´ PuissanceQuatre possede au moins les m ` ethodes suivantes : ´
- un constructeur
- une methode ´ partie finie : detecte la fin de partie ´
- une methode ´ carac(joueur) : renvoie la marque sur le pion du joueur (un O ou un X)
- une methode ´ str : pour afficher le plateau de jeu
- une methode ´ pose colonne(choix,joueur) : pour faire tomber le pion de joueur dans
la colonne choix. Cette methode renvoie faux si ´ choix ne correspond pas a un num ` ero de ´
colonne ou si la colonne est dej´ a pleine. `
Nous allons en ajouter quelques unes (toutes tres simples). `
1
Exercice 1 : Le constructeur
Un PuissanceQuatre est caracteris ´ e par ´
— un nombre de lignes (par defaut, 6) ´
— et un nombre de colonnes (par defaut, 7) ´
— un plateau de jeu self. plateau, dont les cases contiennent soit -1 si la case est vide, 0 si
elle contient un pion du joueur 0, 1 si elle contient un pion du joueur 1.
— une liste self. carac qui contient juste les deux carcteres ` ’O’ et ’X’. Cette liste n’est utile
que pour rendre l’affichage du jeu agreable aux joueurs. ´
— les coordonnees de la derni ´ ere case remplie ` self. dernier coup. Elles sont initialisees ´ a`
(-1,-1).
Modifiez le constructeur du Taquin pour qu’il devienne un constructeur de PuissanceQuatre.
Exercice 2 : Methode ´ carac
Specifiez puis ´ ecrivez la m ´ ethode ´ carac(joueur) qui renvoie la marque sur le pion du joueur (un
O ou un X). Quel attribut cette methode utilise-t-elle ? ´
Exercice 3 : Affichage du plateau de jeu
Inspirez-vous du dialogue avec le joueur mis en annexe pour faire modifier l’affichage du Taquin
en un affichage de PuissanceQuatre. Vous remarqeurez que pour aider les joueurs, le numero des ´
colonnes est indique sur la premi ´ ere ligne d’affichage. `
Exercice 4 : Colonne valide
Specifiez puis ´ ecrivez la m ´ ethode ´ colonne valide qui verifie que le num ´ ero de colonne donn ´ e´
en parametre est valide : il correspond bien ` a un indice de colonne, et il y a au moins une case libre dans `
cette colonne.
Exercice 5 : Poser un pion
Specifiez puis ´ ecrivez la m ´ ethode ´ pose colonne(choix,joueur) qui fait tomber le pion de
joueur dans la colonne choix. Cette methode renvoie faux si ´ choix n’est pas valide. N’oubliez pas
de memoriser dans ´ self. dernier coup les coordonnees de la case dans laquelle le pion arrive. ´
Dans un premier temps, votre methode ´ partie finie peut renvoyer False systematiquement. ´
Vous devez pouvoir tester votre jeu !
Exercice 6 : Coordonnees valides ´
Specifiez puis ´ ecrivez la m ´ ethode ´ coords valide qui verifie que le num ´ ero de ligne et de colonne ´
donnes en param ´ etre sont des coordonn ` ees valides : ils correspondent bien ´ a un indice de ligne et un `
indice de colonne.
Exercice 7 : Compter les pions
Ecrivez la m ´ ethode ´ compte valeur :
2
La case (lig,col) ne doit pas etre compt ˆ ee. Ainsi, un appel de la forme : ´
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 def compte_valeur(self,lig,col,val,inc_lig,inc_col) : PuissanceQuatre, int, int, int, int, int -> int retourne le nombre de cases de valeur val `a partir de (lig,col) dans la direction (inc_lig, inc_col)
self.compte_valeur(lig,col,0,1,-1)
comptera le nombre de pions de valeur 0 presents dans le tableau de mani ´ ere cons ` ecutive dans la demi- ´
diagonale qui part de (lig,col) et prend une direction ”sud-ouest” (vers le coin bas gauche).
Exercice 8 : Partie finie ! Il ne reste plus qu’a sp ` ecifier et ´ ecrire la m ´ ethode ´ partie finie a l’aide `
des deux methodes pr ´ ec´ edentes. ´
Annexe
Voici un exemple d’interaction avec l’utilisateur qui montre l’affichage du plateau a diff ` erentes ´
etapes. ´
moi@gavotte:˜/enseign/algo2/$ python3 puissance4.py
0 1 2 3 4 5 6
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
Aux X de jouer
Dans quelle colonne voulez-vous jouer ? 2
0 1 2 3 4 5 6
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
3
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | |X| | | | |
+-+-+-+-+-+-+-+
Aux O de jouer
Dans quelle colonne voulez-vous jouer ? 3
0 1 2 3 4 5 6
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | |X|O| | | |
+-+-+-+-+-+-+-+
Aux X de jouer
Dans quelle colonne voulez-vous jouer ? 3
0 1 2 3 4 5 6
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | | | | | |
+-+-+-+-+-+-+-+
| | | |X| | | |
+-+-+-+-+-+-+-+
| | |X|O| | | |
+-+-+-+-+-+-+-+
Aux O de jouer
Dans quelle colonne voulez-vous jouer ? ...
Partager