Le jeu se joue à la console entre deux joueurs qui entrent alternativement soit le caractère X, soit le caractère O
Un joueur gagne s'il réussit à avoir un alignement sur une des lignes, ou une des colonnes, ou une des diagonales
Si au bout des neuf coups joués il n'y a pas d'alignement, le match est considéré comme nul
Le but de ce projet, au delà de coder un jeu de morpion, est de comprendre l'intérêt de la programmation modulaire et des tests
Dans l'E.N.T vous a été fourni deux fichiers, le fichier tictac.py et morpion.py
Pourquoi deux fichiers ?
Le fichier tictac.py doit contenir toutes les fonctions qui permettent de jouer à la console le jeu du Morpion
Le module doctest importé dans le fichier tictac.py permet de tester les fonctions une par une
Ensuite une fois les tests terminés on peut jouer en exécutant le fichier morpion.py qui importe le module tictac.py
Exécuter le fichier tictac.py revient à tester pour l'instant la fonction alignementLigne(tableau,numLigne)
Vous devez observer ceci
Que signifient ces lignes ?
Après le symbole >>> le module doctest va exécuter la fonction alignementLigne(tableau,numLigne) sur le cas particulier où la valeur de plateau est [[ '#','#','O'],['X','X','X'],['#','O','O']] et la valeur de numLigne est 1 et comparer le résultat qu'il a obtenu avec le résultat espéré que vous avez mis juste en dessous c'est à dire True
En effet sur ce cas particulier il y a un alignement dans la ligne numéro 1 où il n'y a que des XS'il obtient le même résultat que celui que vous avez mis alors il dit que le test est ok
Cependant à la fin du rapport de tests on observe aussi que beaucoup de fonctions n'ont pas été testées
C'est normal certaines n'ont pas été définies et d'autres comme affichePlateau(plateau) qui retourne None ne seront pas testées
A la fin de la mise au point du projet vous devrez avoir comme rapport de tests
Le message "Test passed" vous assure maintenant que si vos exemples de test ont bien été choisis votre programme est "presque" correct
Il reste peut-être des erreurs mais la méthode que vous avez utilisé en a éliminé un grand nombre au cours des tests
En adaptant la spécification de la fonction alignementLigne(tableau,numLigne) écrire celle de la fonction alignementColonne(tableau,numColonne)
Puis ajouter trois lignes de tests
Puis définir la fonction alignementColonne(tableau,numColonne)
Tester ensuite la fonction
La fonction sontValides(plateau,x,y) est déjà documentée avec des tests. Il reste à la définir et à la tester. A quoi sert cette fonction ?
La façon choisie de programmer le jeu du Morpion est la suivante :
Le joueur doit préciser en quel endroit du plateau il veut mettre le caractère et cet endroit est repéré par des coordonnées (x,y) où x et y sont deux entiers
(x,y) sont valides si 0 <= x <= 2 et 0 <= y <= 2 et si plateau[x][y] == '#'
On ne traitera pas le cas où l'utilisateur entre n'importe quoi à la place de deux entiers
Tester sontValides(plateau,x,y)
La fonction partieEstFinie(plateau,nbCoups) est déjà documentée avec des exemples de tests. Bien comprendre la documentation pour définir cette fonction
Tester
A ce stade le jeu est presque fini d'être mis au point et les deux dernières fonctions jouer(plateau,numJoueur) et unePartie(plateau) seront testées en exécutant morpion.py
La fonction jouer(plateau,numJoueur) consiste dans un premier temps, tant que les coordonnées entrées par un joueur ne sont pas valides, à lui demander d'entrer les coordonnées par l'instruction
i,j = tuple(input("NumLigne,NumColonne ? --> "))
On demande au joueur d'entrer au clavier une suite de deux nombres,sans espace, où le premier
est le numéro de ligne, le second le numéro de colonne par exemple
11
Dans un second temps, une fois que les coordonnées sont valides, on affecte à plateau le symbole car associé au numéro du joueur
plateau[lig][col] = car
Enfin il reste à définir la fonction unePartie(plateau)
Tant que la partie n'est pas finie on fait jouer un joueur de numéro numJoueur avec la fonction jouer(plateau,numJoueur)
On fait évoluer le numéro du joueur numJoueur à chaque tour par l'instruction
numJoueur = (numJoueur + 1) % 2
Enfin pour que le jeu soit compréhensible on demande à ce qu'il y ait un affichage dans la console :
A la fin du jeu on demande à ce que soit affiché soit un message disant quel joueur a gagné X ou O
soit un message annonçant un match nul