Problèmes jeu du morpion

Fermé
slash91257 - Modifié le 13 nov. 2019 à 17:43
yg_be Messages postés 22770 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 mai 2024 - 13 nov. 2019 à 17:57
Bonjour à tous, j'ai un devoir à faire en python dans lequel je dois programmer le jeu du morpion, cependant, après avoir tester toutes les fonction sauf les fonctions unePartie et jouer qui marchent et qui résoudent les exemples donnés sans aucun soucis, une fois que je reprend mon programme et que j'enlève le module doctest pour mettre le module tictac, rien ne sa passe quand j'exécute ma fonction, quelqu'un pourrait-il m'aider ? Merci d'avance pour votre temps.
from tictac import *
def affichePlateau(plateau):
    
    '''parametre:
       - plateau est un tableau 2D 3 x3 contenant les caracteres '#',ou 'X' ou 'O'

       resultat :
       - aucun
       
    affiche le plateau de jeu dans la console sous la forme d'un tableau 3x3
    '''
    for ligne in plateau:
        for element in ligne:
            print(element," ",end='')
        print()
#--------------------------------------------------------------------------
def alignementLigne(plateau,numLigne):
    '''parametres:
    - plateau est un tableau 2D 3 x3 contenant les caracteres '#',ou 'X' ou 'O'
    - numLigne est le numero de la ligne 0,1 ou 2

      resultat:
    - le booleen True si la ligne de numero numLigne contient 3 'X' ou 3 'O',False sinon
    
    >>> alignementLigne([[ '#','#','O'],['X','X','X'],['#','O','O']],1)
    True
    >>> alignementLigne([[ '#','#','O'],['X','X','#'],['#','O','O']],1)
    False
    '''
    if plateau[numLigne][0] == '#':
        return False
    else:
        elt = plateau[numLigne][0]
        for i in range(1,3):
            if plateau[numLigne][i] != elt:
                return False
        return True
#--------------------------------------------------------------------------
def alignementColonne(plateau,numColonne):
    '''parametres:
    - plateau est un tableau 2D 3 x3 contenant les caracteres '#',ou 'X' ou 'O'
    - numColonne est le numero de la colonne 0,1 ou 2
    
    Resultat:
    - le booleen True si la colonne de numero numColonne contient 3 'X' ou 3 'O',False sinon
    
    >>> alignementColonne([[ '#','#','O'],['X','X','O'],['#','O','O']],2)
    True
    >>> alignementColonne([[ '#','#','O'],['X','X','#'],['#','O','O']],1)
    False
    >>> alignementColonne([[ '#','O','#'],['#','#','#'],['#','X','X']],1)
    False
    '''
    if plateau[0][numColonne] == '#':
        return False
    else:
        elt = plateau[0][numColonne]
        for i in range(1,3):
            if plateau[i][numColonne] != elt:
                return False
        return True          
#--------------------------------------------------------------------------
def alignementDiagonale1(plateau):
    '''parametre:
    - plateau est un tableau 2D 3x3 contenant les caracteres '#',ou 'X' ou 'O'
 
    resultat:
    le booleen True s'il y a un alignement dans la diagonale qui va en haut a gauche jusqu'en bas a droite,False sinon
    
    >>> alignementDiagonale1([[ 'O','#','#'],['X','O','#'],['X','#','O']])
    True
    >>> alignementDiagonale1([[ 'X','#','#'],['X','O','#'],['X','#','O']])
    False
    '''
    if plateau[0][0] == '#':
        return False
    else:
        elt = plateau[0][0]
    if plateau[1][1] == elt:
        if plateau[2][2] == elt:
            return True
    else:
        return False
#--------------------------------------------------------------------------    
def alignementDiagonale2(plateau):
    '''parametre:
    - plateau est un tableau 2D 3x3 contenant les caractères '#',ou 'X' ou 'O'
 
    resultat:
    le booleen True s'il y a un alignement la diagonale qui va en bas a gauche jusqu'en haut a droite,False sinon
    >>> alignementDiagonale2([[ '#','#','O'],['X','O','#'],['O','#','X']])
    True
    >>> alignementDiagonale2([[ 'X','#','#'],['X','O','#'],['X','#','O']])
    False
    '''
    if plateau[2][0] == '#':
        return False
    else:
        elt = plateau[2][0]
    if plateau[1][1] == elt:
        if plateau[0][2] == elt:
            return True
    else:
        return False    
#--------------------------------------------------------------------------
def alignementLignes(plateau):
    '''parametre:
    - plateau est un tableau 2D 3x3 contenant les caracteres '#',ou 'X' ou 'O'
 
    resultat:
    le booleen True s'il y a un alignement dans une des trois lignes,False sinon
    
    >>> alignementLignes([[ 'X','#','O'],['X','X','O'],['O','O','X']])
    False
    >>> alignementLignes([[ '#','#','O'],['X','O','#'],['O','O','O']])
    True
    '''    
    return alignementLigne(plateau,0) or alignementLigne(plateau,1) or alignementLigne(plateau,2)
#--------------------------------------------------------------------------
def alignementColonnes(plateau):
    '''parametre:
    - plateau est un tableau 2D 3x3 contenant les caracteres '#',ou 'X' ou 'O'
 
    resultat:
    le booleen True s'il y a un alignement dans une des trois colonnes,False sinon
    
    >>> alignementColonnes([[ 'X','#','O'],['X','X','O'],['X','O','X']])
    True
    >>> alignementColonnes([[ '#','#','O'],['X','O','#'],['O','O','O']])
    False
     ''' 
    return alignementColonne(plateau,0) or alignementColonne(plateau,1) or alignementColonne(plateau,2)
#--------------------------------------------------------------------------
def alignementDiagonales(plateau):
    '''parametre:
    - plateau est un tableau 2D 3x3 contenant les caracteres '#',ou 'X' ou 'O'
 
    resultat:
    le booleen True s'il y a un alignement dans une des deux diagonales,False sinon
    
    >>> alignementDiagonales([[ 'X','#','O'],['X','X','O'],['X','O','X']])
    True
    >>> alignementDiagonales([[ '#','#','O'],['X','O','#'],['X','O','O']])
    False
     ''' 
    return alignementDiagonale1(plateau) or alignementDiagonale2(plateau)
#--------------------------------------------------------------------------
def alignement(plateau):
    '''parametre:
    - plateau est un tableau 2D 3x3 contenant les caracteres '#',ou 'X' ou 'O'
 
    resultat:
    le booleen True s'il y a un alignement dans une des trois lignes ou une des trois colonnes ou une des deux diagonales, False sinon
    
    >>> alignement([[ 'X','#','O'],['X','X','O'],['X','O','X']])
    True
    >>> alignement([[ '#','#','O'],['X','O','#'],['X','O','O']])
    False
        ''' 
    return alignementLignes(plateau) or alignementColonnes(plateau) or alignementDiagonales(plateau)
     
#--------------------------------------------------------------------------
def sontValides(plateau,x,y):
    '''parametres:
    - plateau est un tableau 2D 3x3 contenant les caractères '#',ou 'X' ou 'O'
    - x est un entier
    - y est un entier
    
    resultat:
    le booleen True si x et y sont des entiers compris entre 0 et 2 et si
    plateau[x][y] est egal au caractere #,False sinon
    
    >>> sontValides([[ 'X','#','O'],['X','X','O'],['X','O','X']],2,3)
    False
    >>> sontValides([[ '#','#','O'],['X','X','#'],['O','X','O']],0,0)
    True
    ''' 
    if x<= 2 and x>= 0:
        if y<= 2 and y>= 0:
            if plateau[x][y] == '#':
                return True
    return False
        
#--------------------------------------------------------------------------
def estValide(car,numJoueur):
    '''parametres:
    - car est un caractere entre par l'utilisateur au clavier
    - numJoueur est une variable interne egale a  0 ou 1
 
    resultat:
    Le booleen True si le caractere correspond au joueur, False sinon
    
    >>> estValide('Z',0)
    False
    >>> estValide('X',0)
    True
    >>> estValide('O',0)
    False
    >>> estValide('O',1)
    True
    ''' 
    if numJoueur == 0:
        if car == 'X':
            return True
    elif numJoueur == 1:
        if car == 'O':
            return True
    return False
        
#--------------------------------------------------------------------------
def partieEstFinie(plateau,nbCoups):
    '''parametres:
    - plateau est un tableau 2D 3x3 contenant les caracteres '#',ou 'X' ou 'O'
    - nbCoups est un entier (variable interne)
    
    resultat:
    Le booleen True si la partie est finie quand nbCoups est egal a 9
    soit il y a un alignement dans le plateau,False sinon
    
    >>> partieEstFinie([[ 'X','#','O'],['X','X','O'],['X','O','X']],6)
    True
    >>> partieEstFinie([[ '#','#','O'],['X','X','#'],['O','X','O']],6)
    False
    >>> partieEstFinie([[ 'X','O','X'],['X','O','O'],['O','X','X']],9)
    True
    ''' 
    return (nbCoups == 9) or alignement(plateau)
    
#-------------------------------------------------------------------------- 
def jouer(plateau,numJoueur):
    '''parametres:
    - plateau est un tableau 2D 3x3 contenant les caracteres '#',ou 'X' ou 'O'
    - numJoueur est le numero du joueur (variable interne)

    resultat:
    -aucun (None)

    jouer consiste pour le joueur numJoueur de placer dans le plateau
    en un endroit de son choix le caractere correspondant a  son numero
    '''
    saisieValide=False
    while(not(saisieValide)):
        lig,col = input("NumLigne,NumColonne ? -->  ")
        x=int(lig)
        y=int(col)
        saisieValide= sontValides(plateau,x,y)
        if not(saisieValide):
            print("mauvais numero")
    saisieValide=False
    while(not(saisieValide)):
        car = input("Entrez votre caractère --> ")
        saisieValide= estValide(car,numJoueur) 
        if not(saisieValide):
            print("mauvais caracteres")
            
    plateau[x][y] = car
#-------------------------------------------------------------------------- 
def unePartie(plateau):
    '''parametres:
    - plateau est un tableau 2D 3x3 contenant le caractere '#' au debut

   resultat:
   - aucun

   Durant une partie les joueurs jouent chacun son tour
   Au premier Joueur qui joue 'X' est associe le numero 0
   Au deuxieme Joueur qui joue 'O' est associe le numero 1
   '''
    numJoueur=0
    nbCoups=0
    while(not(partieEstFinie(plateau,nbCoups))):
        if numJoueur==0 :
            print("X joue:......")
        else:
            print("O joue :.....")
        jouer(plateau,numJoueur)
        affichePlateau(plateau)
        nbCoups = nbCoups+1
        print("nbCoups =",nbCoups)
        numJoueur=(numJoueur+1)%2
    if alignement(plateau):
        if numJoueur ==0:
            print("Le joueur O a gagne")
        else :
            print("Le joueur X a gagne")
    else :
        print ("match nul ")    




Configuration: Windows / Chrome 78.0.3904.97
A voir également:

1 réponse

yg_be Messages postés 22770 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 mai 2024 1 481
13 nov. 2019 à 17:57
bonjour, comment exécutes-tu ta fonction?
0