示例#1
0
def Cluedo(ficJoueurs, ficCartes, ficPlateau):
    """
	Construit un nouveau jeu de cluedo à partir de trois fichiers: les joueurs, les cartes et le plateau
	paramètres: ficJoueurs le nom du fichier des joueurs
				ficCartes le nom du fichier contenant la description des cartes
				ficPlateau le nom du fichier contenant l'état du plateau
	Cette fonction retourne un nouveau jeu de cluedo (une nouvelle partie), elle va donc initialiser les joueurs,
	le plateau le jeu de carte, tirer au hasard une énigme et distribuer les cartes au joueurs. 
	Les fiches indices de chaque joueur seront initialisées et les pions des joueurs seront placés sur leur départ
	Le joueur principal (celui dont on voit la fiche indice) est soit le joueur humain s'il y en a un, le premier joueur sinon
	"""
    jeuCarte = jeucarte.lireJeuCarte(ficCartes)
    jeucarte.melangerJeu(jeuCarte)
    listeJoueurs = joueur.lireJoueurs(ficJoueurs)
    myst = jeucarte.definirMystere(jeuCarte)
    distribuerCartes(jeuCarte, listeJoueurs)
    plato = plateau.lirePlateau(ficPlateau)
    liste_num_joueur = []
    for joueurs in listeJoueurs:
        liste_num_joueur.append(joueur.getNum(joueurs))
        fiche_joueur = ficheIndices.FicheIndices(listeJoueurs, jeuCarte)
        ficheIndices.initFicheIndices(fiche_joueur, joueur.getNum(joueurs),
                                      joueur.getCartes(joueurs))
        joueurs[5] = fiche_joueur
    plateau.poserPionCaseDepart(plato, liste_num_joueur)
    return [
        listeJoueurs, plato, jeuCarte, myst,
        joueurPrincipal(listeJoueurs), 1
    ]
示例#2
0
def traiterCocher(clu, arguments):
    """
    permet au joueur humain de completer sa fiche en plus de ce que l'ordinateur aura automatique mis à jour
    """
    commande = arguments.split()
    if len(commande) < 4:
        return -1, "La commande cocher doit contenir la categorie et le numéro de la carte, le numéro du joueur et le type d'info\nPar exemple: 1 4 2 + pour indiquer que l'on pense que le joueur 2 possède la carte 4 de la catégorie PERSONNE"
    if commande[3] not in '+-':
        return -1, "L'indication doit être + (possède) ou - (ne possède pas)"
    if commande[0] not in str(carte.PROFESSEUR) + str(carte.MATIERE) + str(
            carte.SALLE):
        return -1, "la catégorie de carte doit être " + str(
            carte.PROFESSEUR) + " " + str(carte.MATIERE) + " " + str(
                carte.SALLE)
    if not commande[1].isdigit() or int(
            commande[1]) not in jeucarte.getListeNumCarteCategorie(
                cluedo.getJeuCartes(cluedo)):
        return -1, "les numéros de carte possibles pour cette catégorie sont " + str(
            jeucarte.getListeNumCarteCategorie(cluedo.getJeuCartes(cluedo)))
    if not commande[1].isdigit() or int(commande[1]) not in range(
            1,
            getNbJoueurs(cluedo) + 1):
        return -1, "les numéros de joueur possibles sont les chiffres entre 1 et " + str(
            getNbJoueurs(cluedo) + 1)
    ficheIndices.connaissance(joueur.getFiche(cluedo.getJoueurCourant(cluedo)),joueur.getNum(cluedo.getJoueurCourant(cluedo)),\
                              int(commande[1]),int(commande[0]),commande[3])
    return 0, "Indication prise en compte"
示例#3
0
def FicheIndices(_listeJoueurs, _jeuCartes):
    """
    retourne une fiche indices
    paramètres: _listeJoueurs: la liste des joueurs participant à la partie
                _jeuCartes: le jeu de cartes qui sera distribué aux joueurs
    exemple = {
        prof1 : {1:'?', 2:'?',3:'?',4:'?'},
        prof2 : {1:'?', 2:'?',3:'?',4:'?'},
        prof3 : {1:'?', 2:'?',3:'?',4:'?'},
        salle1 : {1:'?', 2:'?',3:'?',4:'?'},
        salle2 : {1:'?', 2:'?',3:'?',4:'?'},
        matiere1 : {1:'?', 2:'?',3:'?',4:'?'},
        matiere2 : {1:'?', 2:'?',3:'?',4:'?'},
        matiere3 : {1:'?', 2:'?',3:'?',4:'?'},
        matiere4 : {1:'?', 2:'?',3:'?',4:'?'}
    }
    """
    listeNumJoueurs = []
    for joueurs in _listeJoueurs:
        numJoueur = joueur.getNum(joueurs)
        listeNumJoueurs.append(numJoueur)
    ficheIndices = {}
    for cartes in _jeuCartes:
        if carte.getNum(cartes) != cluedo.getNumPieceHypothese(1):
            ficheIndices[cartes] = creerIndications(listeNumJoueurs)
    return ficheIndices
示例#4
0
def deplacerJoueurCourant(cluedo, lig, col):
    """
	cette fonction modifie le plateau du cluedo en enlevant le pion du joueur courant de son emplacement actuel
	et le positionnant sur la case destination. Elle retourne de plus la catégorie de la case destination
	paramètres: cluedo          : le jeu de cluedo
				lig: le numéro de la ligne destination
				col: le numéro de la colonng destination
	resultat: catégorie de la case destination (numero de la pièce ou couloir)
	"""
    plato = getPlateau(cluedo)
    joueurs = getJoueurCourant(cluedo)
    (pos_x_joueur, pos_y_joueur) = plateau.posJoueur(plato,
                                                     joueur.getNum(joueurs))
    plateau.enleverPion(plato, pos_x_joueur, pos_y_joueur)
    plateau.mettrePion(plato, lig, col, joueur.getNum(joueurs))
    categorie = case.getCategorie(plateau.getCase(plato, lig, col))
    return categorie
示例#5
0
def choixProfMatOrdinateur(cluedo, numPiece):
    """
	retourne sous la forme d'un couple numProf,numMat le choix du joueur courant géré par un ordinateur
	cette fonction se sert la fonction creerUneHypothese de la structure ficheIndices
	paramètres: cluedo le jeu de cluedo
				numPiece le numéro de la pièce où se trouve le joueur courant
	résultat un couple numProf,numMat
	"""
    joueur_courant = getJoueurCourant(cluedo)
    choix = ficheIndices.creerUneHypothese(joueur.getFiche(joueur_courant),
                                           joueur.getNum(joueur_courant),
                                           numPiece)
    return choix[0], choix[1]
示例#6
0
def afficherCluedo(cluedo, information):
    """
	affiche la vue du cluedo c'est-à-dire le plateau ainsi que la fiche indice du joueur principal et le message d'information
	paramètres: cluedo le jeu de cluedo
				information le message à afficher avec le jeu
	"""
    print()
    joueurCourant = getJoueurCourant(cluedo)
    debutInformation="--------- Tours numéro "+str(getNumTour(cluedo))+"\n"+\
     "    c'est au joueur "+str(joueur.getNum(joueurCourant))+" appelé "+joueur.getNom(joueurCourant)+ " de jouer\n"

    plateau.afficherPlateau(getPlateau(cluedo),
                            (debutInformation + information).split('\n'))
    print(ficheIndices.string(joueur.getFiche(getJoueurPrincipal(cluedo))))
示例#7
0
def passageSecretJoueurCourant(cluedo):
    """
	retourne soit None si le joueur courant ne se trouve pas dans une pièce où il y a un passage secret
	soit un triplet numPieceDest,lig,col indiquant le numéro de la pièce destination du passage
	la postion du passage dans la pièce où se trouve le joueur courant
	paramètre: cluedo le jeu de cluedo
	"""
    plato = getPlateau(cluedo)
    (pos_x, pos_y) = plateau.posJoueur(plato,
                                       joueur.getNum(getJoueurCourant(cluedo)))
    liste_pieces = plateau.getPieces(plato)
    num_piece = case.getCategorie(plateau.getCase(plato, pos_x, pos_y))
    for num_piece_actuel, une_piece in liste_pieces.items():
        if num_piece_actuel == num_piece:
            if piece.getPassage(une_piece) != None:
                return (piece.getPassage(une_piece), pos_x, pos_y)
示例#8
0
def jouerDe(cluedo):
    """
	lance les dés (c-à-d choisit aléatoirement un entier compris entre 2 et 12) puis calcule pour chaque pièce
	la distance à laquelle le joueur courant peut s'approcher en fonction des points obtenus sur les dés
	paramètres: cluedo          : le jeu de cluedo
	résultat: un dictionnaire dont les clés sont les numéros de pièce et les valeurs la
			  distance à laquelle le joueur peut s'approcher 
			  de la pièce grâce aux points obtenus aux dés (voir fonction distancePieces)
	"""
    des1 = random.randint(1, 6)
    des2 = random.randint(1, 6)
    des = des1 + des2
    plato = getPlateau(cluedo)
    numJoueur = joueur.getNum(getJoueurCourant(cluedo))
    (pos_x_joueur, pos_y_joueur) = plateau.posJoueur(plato, numJoueur)
    liste_case_accessibles = plateau.accessiblesJoueur(plato, numJoueur, des)
    listePieces = plateau.getPieces(plato)
    dico_dist_piece = distancePieces(cluedo, listePieces,
                                     liste_case_accessibles)
    return des, dico_dist_piece
示例#9
0
def phaseHypothese(clu, numP):
    joueurCourant = cluedo.getJoueurCourant(clu)
    numJoueurCourant = joueur.getNum(joueurCourant)
    jeu = cluedo.getJeuCartes(clu)
    courantPrincipal = joueurCourant == cluedo.getJoueurPrincipal(clu)
    courantHumain = joueur.estHumain(joueurCourant)
    information = ""
    messageErreur = ""
    if courantPrincipal:
        debutInformation="Vous êtes dans la pièce "+jeucarte.getNomCarteParNum(jeu,carte.SALLE,numP)+'\n'+\
            'Entrez votre hypothèse sous la forme p,m\n'
        information = jeucarte.stringCat(
            jeu, carte.PROFESSEUR) + '\n' + jeucarte.stringCat(
                jeu, carte.MATIERE) + '\n'
    else:
        debutInformation = "Le joueur " + str(
            numJoueurCourant
        ) + " est dans la pièce " + jeucarte.getNomCarteParNum(
            jeu, carte.SALLE, numP) + '\n'

    # Interaction pour faire une hypothèse
    fini = False
    while not fini:
        cluedo.afficherCluedo(clu,
                              debutInformation + messageErreur + information)
        hp = getHypothese(clu, numP, courantPrincipal and courantHumain)
        fini = hp != None
        messageErreur = "ATTENTION! vous n'avez pas formulé votre hypothèse correctement\n"

    if courantPrincipal:
        information = "Vous pensez que\n"
    else:
        information = "Il pense que\n"
    information+=jeucarte.getNomCarteParNum(jeu,1,hp[1]) +" donnera un cours de "+\
        jeucarte.getNomCarteParNum(jeu,2,hp[2])+" dans la pièce "+jeucarte.getNomCarteParNum(jeu,3,hp[3])+"\n"
    cluedo.afficherCluedo(clu, debutInformation + information)
    input()
    # interrogation des joueurs sur cette hypothèse
    information += interrogerJoueurs(clu, hp)
    cluedo.afficherCluedo(clu, debutInformation + information)
    input()
示例#10
0
def phaseDeplacement(clu):
    joueurCourant = cluedo.getJoueurCourant(clu)
    numJoueur = joueur.getNum(joueurCourant)
    courantPrincipal = joueurCourant == cluedo.getJoueurPrincipal(clu)
    courantHumain = joueur.estHumain(joueurCourant)
    passageSecret = cluedo.passageSecretJoueurCourant(clu)
    if passageSecret != None:
        numP, lig, col = passageSecret
        rep = getReponsePassage(clu, numP, courantHumain and courantPrincipal)
        if rep == "O":
            if courantPrincipal:
                information = "Vous avez choisi de prendre le passage secret vers la salle " + str(
                    numP) + '\n'
            else:
                information = "Le joueur " + str(
                    numJoueur
                ) + " a choisi de prendre le passage secret vers la salle " + str(
                    numP) + '\n'
            cluedo.deplacerJoueurCourant(clu, lig, col)
            cluedo.afficherCluedo(clu, information)
            return numP

    de, distances = cluedo.jouerDe(clu)

    information = ""
    messageErreur = ""

    if courantPrincipal:
        information += "Les dés valent " + str(de) + "\n" + infoDistance(
            distances) + "\nVeuillez choisir votre pièce destination\n"
    # Interaction pour choisir une destination
    fini1 = False
    while not fini1:
        cluedo.afficherCluedo(clu, messageErreur + information)
        lig, col = getDestination(clu, distances, courantHumain
                                  and courantPrincipal)
        fini1 = lig != -1
        messageErreur = "ATTENTION! Cette pièce n'existe pas\n"

    numP = cluedo.deplacerJoueurCourant(clu, lig, col)
    return numP
示例#11
0
def phaseSolution(clu):
    joueurCourant = cluedo.getJoueurCourant(clu)
    numJoueurCourant = joueur.getNum(joueurCourant)
    jeu = cluedo.getJeuCartes(clu)
    courantPrincipal = joueurCourant == cluedo.getJoueurPrincipal(clu)
    courantHumain = joueur.estHumain(joueurCourant)
    messageErreur = ""
    information = ""
    if courantPrincipal:
        debutInformation="Vous êtes dans la pièce "+jeucarte.getNomCarteParNum(jeu,carte.SALLE,cluedo.getNumPieceHypothese(clu))+\
        '\nVeuillez formuler votre réponse sous la forme numProf,numMat,numSalle\n'
    else:
        debutInformation="Le joueur "+ str(numJoueurCourant)+" est dans la pièce "+\
            jeucarte.getNomCarteParNum(jeu,carte.SALLE,cluedo.getNumPieceHypothese(clu))+'\n'
    # Interaction pour faire donner une solution
    fini = False
    while not fini:
        cluedo.afficherCluedo(clu,
                              debutInformation + messageErreur + information)
        hp = getLaSolution(clu, courantPrincipal and courantHumain)
        fini = hp != None
        messageErreur = "ATTENTION! vous n'avez pas formulé votre solution correctement\n"

    if courantPrincipal:
        information = "Vous pensez que\n"
    else:
        information = "Il pense que\n"
    information+=jeucarte.getNomCarteParNum(jeu,1,hp[0]) +" donnera un cours de "+\
        jeucarte.getNomCarteParNum(jeu,2,hp[1])+" dans la pièce "+jeucarte.getNomCarteParNum(jeu,3,hp[2])+"\n"
    fini = hp == cluedo.getSolution(clu)
    if fini:
        information += " et c'est la bonne réponse !"
        showinfo('CLUEDO', "BRAVO C'EST GAGNE")
    else:
        information += " et ce n'est pas la bonne réponse !!"
        cluedo.elimineJoueurCourant(clu)

    cluedo.afficherCluedo(clu, debutInformation + information)

    return fini
示例#12
0
def interrogerJoueurs(clu, hypothese):
    joueurCourant = cluedo.getJoueurCourant(clu)
    ficheJoueurCourant = joueur.getFiche(joueurCourant)
    indiceJoueurCourant = cluedo.getIndiceJoueurCourant(clu)
    nbJoueurs = cluedo.getNbJoueurs(clu)
    listeJoueurs = cluedo.getListeJoueurs(clu)
    information = ""
    for i in range(1, nbJoueurs):
        indiceInterroge = (indiceJoueurCourant + i) % nbJoueurs
        joueurInterroge = listeJoueurs[indiceInterroge]
        numJoueurInterroge = joueur.getNum(joueurInterroge)
        information += "\nle joueur " + str(
            numJoueurInterroge) + " est interrogé"
        if joueur.estHumain(joueurInterroge) and joueurInterroge==cluedo.getJoueurPrincipal(clu) and\
           joueur.reponseHypothese(joueurInterroge,hypothese)!=None:
            cluedo.afficherCluedo(clu, information)
            rep = demanderJoueurHumain(clu, information, joueurInterroge,
                                       hypothese)
        else:
            rep = cluedo.demanderJoueurOrdinateur(clu, joueurInterroge,
                                                  hypothese)
        if rep != None:
            ficheIndices.connaissance(ficheJoueurCourant,numJoueurInterroge,carte.getNum(rep),carte.getCategorie(rep),\
                                      ficheIndices.POSSEDE)
            if joueurCourant == cluedo.getJoueurPrincipal(clu):
                information += "\nLe joueur " + str(
                    numJoueurInterroge) + " vous a montré " + carte.getNom(rep)
            else:
                information += "\nLe joueur " + str(
                    numJoueurInterroge) + " a montré une carte"
            break
        else:
            information += "\nLe joueur " + str(
                numJoueurInterroge) + " ne possède aucune carte"
            for cat, num in hypothese.items():
                for j in range(nbJoueurs):
                    ficheIndices.connaissance(joueur.getFiche(listeJoueurs[j]),numJoueurInterroge,\
                                              num,cat,ficheIndices.NEPOSSEDEPAS)
    return information