Boris Eng

R&D Engineer at OCamlPro, PhD in computer science [first name][last name]@proton.me
« 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 :

X   O   X
O   O   O
X   X   O

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 :

Vérifier la présence d’un gagnant

Ecrire une fonction gagnant(terrain) qui vérifie s’il y a un gagnant et renvoie :

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