« Return to Teaching
Tic-tac-toe
Le jeux de tic-tac-toe se joue à deux joueurs sur un terrain quadrillé de 3x3 cases. Le premier joueur peut placer des croix (X) et le second des cercles (O). Chacun place un symbole tour à tour. Le premier joueur qui aligne trois de ses symboles (horizontalement, verticalement ou en diagonale) gagne la partie.
Nous allons reproduire ce jeu en Python. Pour cela, nous allons découper le programme en plusieurs sous-fonctions qui vont permettre de réutiliser plusieurs fois du code et/ou d’avoir un programme plus clair. Nous allons commencer à partir du programme suivant :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| '''On définit les symboles de chaque joueur pour pouvoir les changer facilement si besoin'''
symJ1 = "X"
symJ2 = "O"
'''Au dessus, on va écrire des fonctions qui représentent des fonctionnalités que l'on pourra utiliser.'''
def affiche_terrain(t):
return "A COMPLETER"
def coup(sym, t, i, j):
return "A COMPLETER"
def jouer(sym, terrain):
return "A COMPLETER"
def gagnant(t):
return "A COMPLETER"
def resultat():
return "A COMPLETER"
'''C'est ici qu'on écrit ce que fait le programme. Le terrain est représenté par une liste de listes.'''
def main():
terrain = [
[None, None, None],
[None, None, None],
[None, None, None]
]
tour = 0
while (gagnant(terrain) != None):
if (tour % 2 == 0):
print("Le tour est pair, c'est au tour de J1 !")
if (tour % 2 == 1):
print("Le tour est impair, c'est au tour de J2 !")
tour += 1
'''On active la fonction principale pour lancer le programme'''
main ()
|
Affichage du terrain
Ecrire une fonction affiche_terrain(t)
qui affiche le terrain comme un quadrillage 3x3 (on affiche un espace si la case est vide).
Par exemple, si on a
terrain = [
['X', 'O', 'X'],
['O', 'O', 'O'],
['X', 'X', 'O']
]
alors l’appel de fonction affiche_terrain(terrain)
produit l’affichage suivant :
Vous pouvez utiliser print("texte", end='blabla')
pour choisir ce que vous voulez afficher à la suite d’un texte (par défaut, on a un saut de ligne après un affichage). On peut sauter une ligne avec print()
et on peut espacer les symboles en affichant le symbole spécial \t
.
Appliquer un coup sur le terrain
Ecrire une fonction coup(sym, terrain, i, j)
qui écrit le symbole sym
à la case terrain[i][j]
.
Par exemple, si le terrain est vide, alors coup(symJ1, terrain, 0, 1)
va produire le terrain suivant :
[
[None, 'X', None],
[None, None, None],
[None, None, None]
]
Faire jouer les joueurs
Ecrire une fonction jouer(sym, terrain)
qui effectue les opérations suivantes :
- Affiche un texte pour demander au joueur qui doit jouer d’entrer l’indice de la ligne puis l’indice de la colonne où jouer.
- Demande à l’utilisateur d’entrer les coordonnées grâce à
input()
(penser à convertir en entier avec int()
).
- Utilise la fonction
coup
pour mettre à jour le terrain.
Vérifier la présence d’un gagnant
Ecrire une fonction gagnant(terrain)
qui vérifie s’il y a un gagnant et renvoie :
0
s’il y a match nul
1
si le joueur 1 a gagné
2
si le joueur 2 a gagné
None
si on ne sait pas
Fin de partie
Ecrire une fonction resultat()
qui vérifie s’il y a un gagnant et qui affiche qui a gagné avec un message.
Compléter le programme pour que le jeu marche pour deux joueurs.
Extensions
-
Modifier le programme pour que gagnant(terrain)
ne soit pas appelé dans la fonction resultat()
.
-
Modifier le programme pour qu’un joueur ne puisse pas jouer sur une case déjà jouée.
-
Modifier le programme pour gérer le cas où le joueur entre une coordonnée entier négatif ou supérieur à 2.
-
Modifier le programme pour gérer le cas où le joueur entre une coordonnée non numérique (par exemple ‘z’).
-
Adapter le programme pour pouvoir jouer à 1 joueur contre l’ordinateur (le coup de l’ordinateur est choisi au hasard) et proposer un menu pour pouvoir soit jouer à 2 joueur ou seul contre l’ordinateur.