Aller au contenu

Défi "Tic Tac Toe"

Pour ceux qui ont de l'avance en programmation python, voici un deuxième défi à réaliser en autonomie (une fois s'être assuré de savoir faire les TD des chapitres A à E !). Il s'agit de programmer le jeu du morpion (ou "tic tac toe" en anglais).

Les notions qu'il faudra utiliser pour ce projet sont les même que pour le premier défi :

  • Les fonctions
  • Les listes
  • Les boucles while et for
  • Les conditions if et else
  • Les chaînes de caractères
  • Les entrées/sorties (input/output)
  • Les dictionnaires
  • ...

Le principe du jeu est simple : il y a deux joueurs qui jouent chacun à tour de rôle. Le premier joueur joue avec les "X", le deuxième avec les "O". Le but est d'aligner 3 symboles identiques (horizontale, verticale ou diagonale) avant l'autre joueur.

Exemple de déroulement du jeu

Welcome to Tic-Tac-Toe!
Do you want to be X or O?
X
The computer will go first.
O| |
-+-+-
 | |
-+-+-
 | |
What is your next move? (1-9)
3
O| |
-+-+-
 | |
-+-+-
O| |X

What is your next move? (1-9)
4
O| |O
-+-+-
X| |
-+-+-
O| |X
What is your next move? (1-9)
5
O|O|O
-+-+-
X|X|
-+-+-
O| |X
The computer has beaten you! You lose.
Do you want to play again? (yes or no)
no

Le diagramme représentant l'algorithme du jeu

Il n'est pas toujours nécessaire de dessiner « Flow Chart ». Nous pouvons simplement démarrer à écrie du code. Mais souvent, pendant la programmation, nous allons penser à des choses à ajouter ou à changer que nous n'avions pas envisagées auparavant. Nous pourrions finir par devoir modifier ou supprimer beaucoup de code que nous avions déjà écrit, ce qui serait une perte de temps. Pour éviter cela, il est toujours préférable de réfléchir attentivement et de planifier le fonctionnement du programme avant de commencer à écrire du code.

Pour vous aider à réfléchir, on vous propose un diagramme représentant l'algorithme du jeu attendu (un peu d'anglais, mais c'est facile à comprendre 😉):

tictactoe's flowchart

Quelques pistes pour la réalisation

Joueurs

On pourra envisager une première version du jeu où l'utilisateur joue contre un autre utilisateur (chacun son tour). Puis une version plus évoluée où l'utilisateur joue contre l'ordinateur (l'ordinateur jouera de manière aléatoire).

Le board

Pour gérer le palteau de jeu, on peut utiliser le principe de la fonction suivante :

def drawBoard(board):
    # This function prints out the board that it was passed.
    # "board" is a list of 10 strings representing the board (ignore index 0).
    print(board[7] + '|' + board[8] + '|' + board[9])
    print('-+-+-')
    print(board[4] + '|' + board[5] + '|' + board[6])
    print('-+-+-')
    print(board[1] + '|' + board[2] + '|' + board[3])

C'est tout cette fois-ci pour les indications. C'est un peu plus corsé que le premier défi, mais vous pouvez y arriver ! N'hésitez pas à trouver de l'aide si vous bloquez.

La correction

à venir 😉