Mini-projet : Tic Tac Toe

Objectifs

Ecrire un programme Python permettant à 2 joueurs de jouer au tic tac toe.

Contraintes

Le programme principal (hors fonctions et appel de bibliothèque) ne devra pas faire plus de 25 lignes. Le programme devra donc être séparé en plusieurs fonctions. Vous êtes libre de suivre les consignes données pour la création de fonction (« Guide de consigne » un peu plus bas dans la page) ou bien d’effectuer votre propre programme avec vos propres fonctions.

A chaque fois que l’on demande à l’utilisateur de rentrer un choix de case, si ce choix n’est pas possible alors la demande sera réitérée.

Le déroulement du jeu lors de l’exécution du programme devra s’effectuer comme ci-dessous. Le même affichage doit être respecté.

Guide de consignes

Ce guide vous permettra de programmer des fonctions utiles vous atteindre l’objectif donné.

Fonction de création des joueurs

Créer une fonction « creation_joueur » qui demande à l’utilisateur de rentrer le pseudo du joueur 1 puis du joueur 2.
Le pseudo du joueur 1 sera stocké dans la variable j1.
Le pseudo du joueur 1 sera stocké dans la variable j2.
La fonction retournera les variables j1 et j2.

Ci-dessous un exemple d’appel de cette fonction dans la console.

Fonction de simulation d’un toss (pile ou face)

Importer la bibliothèque « random » et « time ».
Créer une fonction « toss » qui prend en argument j1 et j2 (chaine de caractères correspondants aux pseudos des joueurs lors de l’appel de cette fonction).
Cette fonction simulera un jeu du « pile ou face » pour savoir qui a la main.
Un chiffre aléatoire est tiré grâce à la fonction « randint » de la bibliothèque random. Soit 0 pour pile, soit 1 pour face.
La fonction demande au joueur 1 de rentrer soit « pile » soit « face ».
Si la réponse n’est ni « pile » ni « face » la fonction redemandera la réponse du joueur.
Lorsque le joueur 1 à donné sa réponse la fonction effectuera un décompte « 3 », « 2 », « 1 » espacé d’une seconde chacun grâce à la fonction sleep() de la bibliothèque time.
Si le joueur 1 trouve le bon résultat on affiche celui-ci et la fonction retournera dans l’ordre la variable j1 (joueur qui a donc la main) puis j2.
Si le joueur 1 ne trouve pas le bon résultat on affiche celui-ci et la fonction retournera dans l’ordre la variable j2 (joueur qui a donc la main) puis j1.
Cette fonction permet de déterminer qui commence avec les pions « X ».

Ci-dessous un exemple d’appel de cette fonction dans la console.

Fonction d’affichage de la grille de jeu

La grille de jeu sera représentée grâce à une liste de liste (tableau à 2 dimensions) et s’initialisera comme ceci :

grille = [["#","#","#"],["#","#","#"],["#","#","#"]]

Créer une fonction « affichage » qui prend en argument une liste de liste g et qui permet de l’afficher dans la console sous la même forme que dans l’exemple ci-dessous avec les repères pour chaque ligne et chaque colonne.

Fonction de choix d’une case

Créer une fonction « choisir » qui prend en argument j (la chaine de caractère d’un pseudo des joueurs) et g (la grille). Cette fonction permettra au joueur j de choisir une case parmi celle existante.
Si la case choisie est déjà prise dans la grille où n’est pas valide (ex : « A3″, »D1″, »A11″, »1A », etc.) le joueur doit choisir une autre case.

Pour vérifier si le choix est valide, on peut créer deux tableaux comme ci-dessous et vérifier si le premier caractère du choix de l’utilisateur est dans la liste « ligne », si le deuxième dans la liste « colonne » et si la choix est composé de seulement 2 caractères :

ligne = ["A","B","C"]
colonne = ["0","1","2"]

Pour vérifier si la case choisie n’est pas déjà utilisé il faut regardé dans la grille si elle est différente de « # ». Il faut donc passer du caractère représentant la ligne à un numéro représentant l’index de la ligne de la grille. Pour cela on peut utiliser la fonction index.

test=ligne.index("A")

Cette commande permettra de retourner la valeur 0.