Python projet
Résolu/FerméPhil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 14 nov. 2022 à 13:22
- Python projet
- Citizen code python avis - Accueil - Outils
- Musique projet x - Forum Musique / Radio / Clip
- Projet x film ✓ - Forum Musique / Radio / Clip
- Filigrane projet - Guide
6 réponses
Modifié le 12 nov. 2022 à 16:47
Bonjour,
Déjà pas pratique de taper des phrases comme choix dans un menu, moi, je ferais ça:
menu = ''' 1 Joueur vs joueur 2 Joueur vs IA 3 Quitter > ''' le_mec = '' while(not le_mec in [1,2,3]): os.system('cls' if os.name=='nt' else 'clear') print('\n' + '''Bienvenu dans le Tic Tac Toe'''.center(50,'*')) le_mec = int(input(menu)) if(le_mec == 1): etc ...
Il y a juste à taper un chiffre ...
Ensuite, pas top de mettre les fonctions dans un if
En général, on fait:
imports
fonctions
programme principal:
initialisations
saisies
boucle de jeu
from operator import truediv from random import * import os def affichage(tableau): ''' Creation d'une fonction affichage qui prend en parametre le tableau. Chaque ligne de 4 a partire de la 16eme ligne, on crée une ligne avec des tiret pour separer les lignes avec les cases. ''' print("-------") print(tableau[12] + " |" + tableau[13] + " |" + tableau[14] + " |" + tableau[15]) print("-------") print(tableau[8] + " |" + tableau[9] + " |" + tableau[10] + " |" + tableau[11]) print("-------") print(tableau[4] + " |" + tableau[5] + " |" + tableau[6] + " |" + tableau[7]) print("-------") print(tableau[0] + " |" + tableau[1] + " |" + tableau[2] + " |" + tableau[3]) print("-------") return tableau def mouvementjoueur(): ''' fonction mouvementjoueur qui demande a l'utilisateur un nombre entre 0 et 16 dans le tableau si son nombre est compris entre 0 et 16 il pourra placer son point et si le tableau est deja occuper par un autre point alors il pourra placer son pion sinon un message disant que un piont est deja placer s'affichera ''' demander = int(input("Entrez un nombre entre 0 et 16 dans le tableau ")) if demander >= 0 and demander <= 16 and tableau[demander-1] == "": # Instruction qui nous permet de determiner si une case est occuper ou non et de placer un element dans la case tableau[demander-1] = joueurdebase else: print("Ce territoire est deja conquis veuillez changer !") def changejoueur(): ''' Fonction changejoueur qui permet de passer du joueur X au joueur O ''' global joueurdebase # Une variable appeller en dehors d'une fonction ne fonctionne pas il faut alors utiliser la fonction global qui permet de generaliser la variable if joueurdebase == "X": joueurdebase = "O" else: joueurdebase = "X" def gagnant_horizontale(): global gagnant if tableau[0] == tableau[1] == tableau[2] == tableau[3] and tableau[2] != "": gagnant = tableau[0] elif tableau[4] == tableau[5] == tableau[6] == tableau[7] and tableau[6] != "": gagnant = tableau[4] elif tableau[7] == tableau[8] == tableau[9] == tableau[10] and tableau[8] != "": gagnant = tableau[7] return True def ligne(): global gagnant if tableau[0] == tableau[4] == tableau[8] and tableau[0] != "": gagnant = tableau[0] elif tableau[1] == tableau[5] == tableau[9] and tableau[1] != "": gagnant = tableau[1] elif tableau[2] == tableau[6] == tableau[10] and tableau[2] != "": gagnant = tableau[2] return True def diagonal(): global gagnant if tableau[0] == tableau[5] == tableau[10] and tableau[0] != "": gagnant = tableau[0] elif tableau[2] == tableau[5] == tableau[8] and tableau[2] != "": gagnant = tableau[2] elif tableau[2] == tableau[6] == tableau[10] and tableau[2] != "": gagnant = tableau[2] return True def gagnantconditioon(): global gagnant if gagnant_horizontale(): print("Le gagnant est ",gagnant,"!") elif ligne(): print("Le gagnant est ",gagnant, "!") elif diagonal(): print("Le gagnant est",gagnant,"!") def nulle(): global tictactoe if "" not in tableau: affichage(tableau) print("Desoler mais il n'y a plus d'issu c'est TIE !") tictactoe = False def robot(): while joueurdebase == "O": position = randint(1,17) if tableau[position] == "": tableau[position] = "O" changejoueur() menu = ''' 1 Joueur vs joueur 2 Joueur vs IA 3 Quitter > ''' le_mec = '' while(not le_mec in [1,2,3]): os.system('cls' if os.name=='nt' else 'clear') print('\n' + '''Bienvenu dans le Tic Tac Toe'''.center(50,'*')) le_mec = int(input(menu)) if(le_mec == 1): ''' Joueur contre joueur ''' tictactoe = True # Notre jeux joueurdebase = "X" # Le joueur de base de cette partie sera X gagnant = None # pas encore de gagant perdant = None # pas encore de perdant tableau = ["","","","","","","","","","","","","","","",""] joueur1 = str(input(" Joueur 1 Quel est ton nom ? ")) # Nom du joueur 1 joueur2 = str(input(" Joueur 2 Quel est ton nom ? ")) # nom du joueur 2 print("Bienvenue dans ce tic tac toe", joueur1,"et",joueur2) # message de bienvenue print(joueur1,": X","|",joueur2,": O") # Attribution des rôles elif(le_mec == 2): '''Joueur contre IA ''' pass if(le_mec != 3): while tictactoe: affichage(tableau) mouvementjoueur() changejoueur() gagnant_horizontale() ligne() diagonal() gagnantconditioon() nulle()
Modifié le 13 nov. 2022 à 10:08
Après suppression des 'return' inutiles dans les fonctions car les valeurs de retour ne sont pas exploitées:
from operator import truediv from random import * import os def affichage(tableau): ''' Creation d'une fonction affichage qui prend en parametre le tableau. Chaque ligne de 4 a partire de la 16eme ligne, on crée une ligne avec des tiret pour separer les lignes avec les cases. ''' print("-------") print(tableau[12] + " |" + tableau[13] + " |" + tableau[14] + " |" + tableau[15]) print("-------") print(tableau[8] + " |" + tableau[9] + " |" + tableau[10] + " |" + tableau[11]) print("-------") print(tableau[4] + " |" + tableau[5] + " |" + tableau[6] + " |" + tableau[7]) print("-------") print(tableau[0] + " |" + tableau[1] + " |" + tableau[2] + " |" + tableau[3]) print("-------") def mouvementjoueur(): ''' fonction mouvementjoueur qui demande a l'utilisateur un nombre entre 0 et 16 dans le tableau si son nombre est compris entre 0 et 16 il pourra placer son point et si le tableau est deja occuper par un autre point alors il pourra placer son pion sinon un message disant que un piont est deja placer s'affichera ''' demander = int(input("Entrez un nombre entre 0 et 16 dans le tableau ")) if demander >= 0 and demander <= 16 and tableau[demander-1] == "": # Détermine si une case est occupée ou non place un élément dans la case tableau[demander-1] = joueurdebase else: print("Ce territoire est deja conquis veuillez changer !") def changejoueur(): ''' Permet de passer du joueur X au joueur O ''' global joueurdebase if joueurdebase == "X": joueurdebase = "O" else: joueurdebase = "X" def gagnant_horizontale(): global gagnant if tableau[0] == tableau[1] == tableau[2] == tableau[3] and tableau[2] != "": gagnant = tableau[0] elif tableau[4] == tableau[5] == tableau[6] == tableau[7] and tableau[6] != "": gagnant = tableau[4] elif tableau[7] == tableau[8] == tableau[9] == tableau[10] and tableau[8] != "": gagnant = tableau[7] def ligne(): global gagnant if tableau[0] == tableau[4] == tableau[8] and tableau[0] != "": gagnant = tableau[0] elif tableau[1] == tableau[5] == tableau[9] and tableau[1] != "": gagnant = tableau[1] elif tableau[2] == tableau[6] == tableau[10] and tableau[2] != "": gagnant = tableau[2] def diagonal(): global gagnant if tableau[0] == tableau[5] == tableau[10] and tableau[0] != "": gagnant = tableau[0] elif tableau[2] == tableau[5] == tableau[8] and tableau[2] != "": gagnant = tableau[2] elif tableau[2] == tableau[6] == tableau[10] and tableau[2] != "": gagnant = tableau[2] def gagnantconditioon(): global gagnant if gagnant_horizontale(): print("Le gagnant est ",gagnant,"!") elif ligne(): print("Le gagnant est ",gagnant, "!") elif diagonal(): print("Le gagnant est",gagnant,"!") def nulle(): global tictactoe if "" not in tableau: affichage(tableau) print("Desolé mais il n'y a plus d'issue c'est TIE !") tictactoe = False def robot(): while joueurdebase == "O": position = randint(1,17) if tableau[position] == "": tableau[position] = "O" changejoueur() menu = ''' 1 Joueur vs joueur 2 Joueur vs IA 3 Quitter > ''' le_mec = '' while(not le_mec in [1,2,3]): os.system('cls' if os.name=='nt' else 'clear') print('\n' + '''Bienvenue dans le Tic Tac Toe'''.center(50,'*')) le_mec = int(input(menu)) if(le_mec == 1): ''' Joueur vs joueur ''' tictactoe = True # Notre jeu joueurdebase = "X" # Le joueur de base de cette partie sera X gagnant = None # pas encore de gagnant perdant = None # pas encore de perdant tableau = ["","","","","","","","","","","","","","","",""] joueur1 = str(input(" Joueur 1 Quel est ton nom ? ")) joueur2 = str(input(" Joueur 2 Quel est ton nom ? ")) print("Bienvenue dans ce tic tac toe", joueur1,"et",joueur2) print(joueur1,": X","|",joueur2,": O") elif(le_mec == 2): ''' Joueur vs IA ''' pass if(le_mec != 3): while tictactoe: affichage(tableau) mouvementjoueur() changejoueur() gagnant_horizontale() ligne() diagonal() gagnantconditioon() nulle()
Bonjour déjà merci infiniment pour ta réponse ça m'a beaucoup aider, mais quand je met le chiffre 2 dans le menue pour avoir le mode joueur vs IA ça me met une erreur : NameError: name 'tictactoe' is not defined
cette erreur est revenue Plusieurs fois lors de certaines de mes tentatives pour faire le mode joueur vs IA tout seul je n'ai toujours pas la solution si tu pourrais m'aider ça serais vraiment gentille de ta part .
ensuite je voudrais savoir a quoi sert le mot clés os.system et autre choses mis a la ligne 105 à 106.
Merci
Modifié le 13 nov. 2022 à 11:05
Bonjour,
"si tu pouvais m'aider, ce serait vraiment gentil de ta part" :-)
Normal que tu aies cette erreur car dans le cas où le_mec = 2, je n'ai rien écrit, il ne se passe rien,
c'est à toi d'y mettre ce qu'il faut pour ce cas-là, comme tu l'as fait si le_mec = 1
A toi de jouer ! Toi seul sait ce que tu veux mettre dans cette IA
Pour commencer, à défaut d'IA et pour tester la mécanique, on pourrait faire que l'ordi joue avec un chiffre
tiré au hasard, et affiner ensuite ...
Ensuite, pour ce qui est des lignes 105 à 106:
la méthode os.system() permet d'exécuter une commande système, dans une fenêtre invite de commande,
quand on tape cls, ça efface tout, donc ici, on efface l'écran en passant cette commande à os.system()
Résultat:
Dans cette boucle while, tant qu'on n'a pas tapé 1,2 ou 3, on efface l'écran et on pose la question à nouveau
Si la réponse est bonne, on sort de la boucle et on peut donc exploiter ce qui est dans le_mec
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionMerci beaucoup j'ai réussi en mettant la même condition que si l'utilisateur taper 3 mais pour 2 et j'insérer juste ma fonction robot() vraiment merci infiniment.
14 nov. 2022 à 13:22
Bonjour,
Tu pourrais même mettre l'effacement d'écran os.system('cls' if os.name=='nt' else 'clear')
en fin de fonction mouvementjoueur(), comme ça au lieu d'avoir une suite de grilles au fur et à mesure
du jeu, tu n'aurais qu'une seule grille affichée qui se mettrait à jour après chaque saisie ...