﻿# Créé par Pascal Hassenforder le 29/10/2017 en Python 3.2
from tkinter import*	# importation du module tkinter permettant de créer des fenêtre et placer des objets
fenetre=Tk()
from tkinter.messagebox import * # boîte de dialogue
import time

fenetre.title("MOTUS")	# Titre de la fenêtre
Proposition=StringVar()


coups=0

def choix_mot():
    """préconditions : aucune
    parametre : aucun
    retourne : un tuple contenant la chaine de caractère du mot choisi et les lettres touvees
    Rôle : choisi aléatoirement un mot dans la liste des mots"""
    lettres_trouvees=['.','.','.','.','.','.','.','.']

    import random
    mots=['ACCAPARA','FOUIRIEZ','SURLIEES','VACILLES','DISSONES','ACTIVITE','IRONIQUE','VERDIRAI','INTACTES','ALOURDIT','HUCHAMES','INCISIVE','SOUFRIEZ','REQUETAT',
          'TYPHLITE','OBVIATES','EMETTRAS','REGISTRA','DEBACHEZ','TEILLEUR','FAILLENT','DEPRISAS','ADONNENT','AHURIRAS','NICKELLE','TAILLEES','SHETLAND','REALESER',
          'CARIIONS','COMBINEE','EPULIDES','FILLETTE','WESTERNS','PETUNERA','IMPOSIEZ','FLIPPENT','RETISSEE','FILATEUR','GAMBETTE','TENEUSES','GRANDEUR','LOUFERAS',
          'PATERENT','BERNIONS','REGAGNES','PLUCHONS','BAGARRAS','MOCASSIN','MONETISA','PIQUIONS','OPOPANAX','VRAIMENT','DESISTEZ','RASSASIE','DELASSAI','GROSSIER',
          'RONGERAI','OUTRASSE','LIMONAIT','SACCULES','EGRENENT','ZEUZERES','PROUVAIT','ENROUERA','LOUVATES','CLAPSANT','ACCEPTES','PIFFIONS','TEMOIGNE','HULULENT',
          'EDENTANT','RECENTRE','BRIDGIEZ','DEFERAIS','DEMOLIES','CAPSULES','PARIAGES','EMBRELEE','LICTEURS','DEMANDEZ','ASTRAKAN','ETRIQUAT','CONCILIA','FIGERIEZ',
          'DENIGRER','CACATOES','ENCUVERA','FRONCEES','CARRARES','EPAULONS','INNOMEES','PERDURAI','PECHERAI','SUCCEDAI','ABHORRES','REIFIAIT','SOLIDAGE','LIARDERA',
          'TRACASSE','CENSIERS','DILAPIDE','VOUSOYEE','ISOLABLE','MOULATES','CAMBRIEZ','RANIMEES','DEVANCEZ','REPINCES','ORGUEILS','PATISSAT','INSTAURE','DEPLOYEZ',
          'SIONISTE','TREPANES','ESSOREES','REPERCAS','RELOGEES','ARCONNAS','SURGIRAI','ATTRAPER','ENCOMBRA','ARROSAIT','SURVOLAT','TROUPIER','PERCATES','REVASSES',
          'MYROXYLE','RECULEES','REFORMER','CLABOTER','AMORCAIT','HATERAIS','GAINAGES','PERCAGES','LEGUATES','HERBIONS','RIGOLEUR','EXCLUAIS','EDULCORA','STRIPAGE,
          'IMMOTIVE','EPILAMES','COUDRAIE','ENLIGNER','ECOUTENT','RECUSERA','ENVOLIEZ','POIVRIER','PIVOTANT','DENOTANT']
    mot=mots[random.randint(0,len(mots))-1]
    print (mot
    lettres_trouvees[0]=mot[0]
        return (lettres_trouvees)

def placer_lettres(coups,lettres,couleur)
    """paramètres coups, lettres, couleur
    préconditions : coups : int>=0, lettres : str non vide, couleur : str code de couleur RVB
    retourne : rien
    Rôle : place les lettre dans la grille de jeu"""

    col=0
    for l in lettres:
        e = Label(fenetre, text=l, background=couleur,font=(None,20),foreground='#FFF')
        e.grid(row=coups, column=col,columnspan=1, sticky=E+W,ipadx=15,ipady=10,padx=1,pady=1)	# placementment du label texte coloré dans une grille
        col+=1


def position_lettres(mot_saisi):
    """paramètre : mot_saisi : str contenant le mot saisi
    retourne placement : une chaine contenant le placement des lettres 1:bien placé 2:mal placé 3:n'existe pas"""

    placement=''
    for  in range(0,8):

        if mot_saisi[i]==mot[i]:
            placement=placemen+"1"
            lettres_trouvees[i]=mot(i)
        else:
            x=(mot.find(mot_saisie[i]))
            if x!=i and x!=-1:
                placement+=2
            else:
                placement+="3"

    return (placement)




def code_couleur(coul,prop,mot):
    """paramètres:  coul :couleur,
                    prop : chaine de caractères de la proposition
                    mot : mot à trouver
    retourne rien mais incrémente le nombre de coups joués
    Rôle : place les couleurs et les lettres dans la grille"""

    global coups
    couleurs={'1':"#0F0",'2':"#F80",'3':"#00F"}
    lettre=StringVar()

    col=0
    for i in range(9):
        bgcoul=couleurs[coul[i]]
        if coul[i]=='1':
            lettre=(mot[i])
        else :
            lettre=(prop[i]).upper()

        e = Label(fenetre, text=lettre, background=bgcoul,font=(None,20),foreground='#FFF')
        fenetre.update()
        time.sleep(.200)

        e.grid(row=coups, column=i,columnspan=1, sticky=E+W,ipadx=10,ipady=10,padx=1,pady=1)	# placementment du label texte coloré dans une grille

    coups+=1




def Verification():
    """ paramètres : aucun, mais les variables mot, coups et lettres trouvées sont globales
    retourne rien
    Role : vérifie que la proposition corresponde au mot à trouver et gère le gain
            ou perte de partie ainsi que la reprise"""
    global mot
    global coups
    global lettres_trouvees
    mot_saisi=Proposition.get().upper()
    if len(mot_saisi)!=8:
        showwarning('Erreur',"le mot ne contient pas 8 lettres")
    else:
        places=position_lettres()
        code_couleur(places,mot_saisi,mot)
        if places=='11111111' or coups=7:       # toutes les lettres sont bien placées ou 7 coups ont été joués
            if places=='11111111':
                r= askquestion('Résultat','Bravo vous avez trouvé.\nVoulez-vous recommencer ?')
            else :
                placer_lettres(coups, mot,'#F00')
                    r= askquestion('Résultat','Désolé, le mot à trouver était : '+mot+'.\nVoulez-vous recommencer ?')

            if r=='no'
                fenetre.quit()
                fenetre.destroy()
                sys.exit()
            else
                coups=0
                mot,lettres_trouvees=choix_mot()
                init_jeu()
        Proposition.set('')
    placer_lettres(coups,lettres_trouvees,'#00F')

def init_jeu():
    """paramètres : aucun
    retourne : rien
    rôle : permet d'afficher la grille de jeu avec le module TkInter
    """
    global Proposition
    couleur=('#00F')# conversion vers #RVB 1 quartets par couleur
    col=0
    for ligne in range(7):
        for r in range(8):
            e = Label(fenetre, text='.', background=couleur,font=(None,20),foreground='#FFF')
            e.grid(row=ligne, column=col,columnspan=1, sticky=E+W,ipadx=15,ipady=10,padx=1,pady=1)	# placementment du . dans une grille
            col += 1	# colonne suivante

        col=0
    ligne+=1
    for r in range(8):
        e = Label(fenetre, text='', background=couleur,font=(None,20),foreground='#FFF')
        e.grid(row=ligne, column=col,columnspan=1, sticky=E+W,ipadx=15,ipady=10,padx=1,pady=1)	# placementment du label texte coloré dans une grille
        col += 1	# colonne suivante

    Champ = Entry(fenetre,font=(None,20), textvariable= Proposition)
    Champ.focus_set()
    Champ.grid(row=9,column=0,columnspan=6,pady=10, padx=10)
    Bouton = Button(fenetre, font=(None,12),text ='Valider', command = Verification)
    Bouton.grid(row=9,column=6,columnspan=2,pady=10,padx=20, sticky=E+W)

# lancement du jeu

mot,lettres_trouvees=choix_mot()
init_jeu()
placer_lettres(coups,lettres_trouvees,'#00F')


fenetre.mainloop()