You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

278 lines
8.9 KiB

from faulthandler import disable
from tkinter import *
import time
import random as rd
import os
'''
_____ _
| __ \ | |
| |__) | __ ___ ______ ___ ___ __| | ___
| ___/ '__/ _ \______/ __/ _ \ / _` |/ _ \
| | | | | __/ | (_| (_) | (_| | __/
|_| |_| \___| \___\___/ \__,_|\___|
'''
# Nettoie la console.
clearConsole = lambda: os.system('cls' if os.name in ('nt', 'dos') else 'clear')
clearConsole()
# Importation des mots dans notre projet
with open("mots.txt", "r",encoding="utf8") as motsfichier:
# On ajoute nos mots dans une liste
mots = motsfichier.readlines()
for i in range(len(mots)):
# On retire les entrées dans nos mots
mots[i]=mots[i].replace("\n","")
# Importation des syllabes dans notre projet
with open("syllabes.txt", "r",encoding="utf8") as syllabesfichier:
# On ajoute nos syllabes dans une liste
syllabes = syllabesfichier.readlines()
for i in range(len(syllabes)):
# On retire les entrées de nos syllabes
syllabes[i]=syllabes[i].replace("\n","")
# Cette liste contiens les points des joueurs
pj=[0,0,0,0,0,0,0]
# Préparation du système de tours
tour_du_joueur=0
'''
______ _ _
| ____| | | (_)
| |__ ___ _ __ ___| |_ _ ___ _ __ ___
| __/ _ \| '_ \ / __| __| |/ _ \| '_ \/ __|
| | | (_) | | | | (__| |_| | (_) | | | \__ \
|_| \___/|_| |_|\___|\__|_|\___/|_| |_|___/
'''
# Reset Zone de Texte (GUI)
# 'mot' est le contenu de notre zone de texte.
def reset_zdt(mot):
# On vérifie si il y a du contenu dans notre zone de texte avant d'exécuter des choses.
if zonedetexte.get()=="":
return
# Si il y a bien quelquechose, alors nous pouvons exécuter la suite.
else:
# On exécute une fonction avec 'mot' comme argument.
jeu("proposition",mot)
# On retire le texte de la zone de texte.
zonedetexte.delete(0,END)
# Cette fonction permet de désactiver la zone de texte.
def disable_zdt():
zonedetexte.configure(state="disabled")
refresh()
# Cette fonction permet d'activer la zone de texte.
def enable_zdt():
zonedetexte.configure(state="normal")
refresh()
# Cette fonction permet de supprimer le contenu de la zone de texte.
def clear_zdt():
zonedetexte.delete(0,END)
refresh()
# Cette fonction permet d'actualiser la fenêtre
def refresh():
fenetre.update()
# Lancement du Jeu (GUI)
def launch_game():
# On retire le bouton start de notre fenêtre.
bouton_start.pack_forget()
# On reset notre écran d'instructions.
mot_affiche.configure(text="")
# On ouvre notre zone de texte.
zonedetexte.configure(state="normal")
# On lance un tour
jeu("tour")
# Cette fonction tire au sort une syllabe depuis notre liste de syllabes
def tirage_syllabe():
# On renvoie une variable tirée au sort.
return rd.choice(syllabes)
# Cette fonction vérifie si le mot du joueur contiens bien la syllabe à trouver
def mot_contiens_syllabe(syllabe_a_trouver,mot_du_joueur):
# On vérifie si c'est bien le cas
if syllabe_a_trouver in mot_du_joueur:
return True
# Si ce n'est pas le cas on return False
else:
return False
# On vérifie si le mot entré par le joueur est conu par notre base de données.
def mot_dans_bdd(mot_du_joueur):
if mot_du_joueur in mots:
return True
# Si ce n'est pas le cas on return False
else:
return False
# On vérifie si le nombre de joueurs entré est bien compris entre 1 et 6
def verif_nb_joueurs(nb_j):
O=[1,2,3,4,5,6] # Nombre de joueurs possibles
if nb_j in O:
return True
# Si ce n'est pas le cas on return False
else:
return False
# La fonction du jeu
def jeu(action,mot=""):
# Action : tour
if action=="tour":
# On crée une variable globale qui sera notre syllabe à trouver
global syllabe_a_trouver
global tentative
tentative=0
# On définit notre syllabe à trouver
syllabe_a_trouver=tirage_syllabe()
# On affiche la syllabe à trouver
jeu("affiche")
# Action : proposition
if action=="proposition":
# Nombre de tentatives dépassées
if tentative>3:
jeu("tentative")
return
# On vérifie si le mot contiens la syllabe requise
if mot_contiens_syllabe(syllabe_a_trouver,mot)==True:
# On vérifie si le mot est dans la base de données
if mot_dans_bdd(mot)==True:
# Si c'est le cas, on lance l'action gagnée !
jeu("oui")
# Si ce n'est pas le cas, on informe le joueur, et relance le tour.
else:
tentative=tentative+1
print(tentative)
# On affiche un message au joueur
mot_affiche.configure(text="Ce mot est inconnu. Aucun point ne sera donc compté.")
# On raffraichis la fenêtre
refresh()
# On nettoie la zone de texte
clear_zdt()
# On désactive la zone de texte
disable_zdt()
# On attends 2 secondes
time.sleep(2)
# On relance le jeu
jeu("affiche",mot)
else:
tentative=tentative+1
# On affiche un message au joueur
mot_affiche.configure(text="Le mot donné le contiens pas la syllabe requise.")
# On raffraichis la fenêtre
refresh()
# On nettoie la zone de texte
clear_zdt()
# On désactive la zone de texte
disable_zdt()
# On attends 2 secondes
time.sleep(2)
# On relance le jeu
jeu("affiche",mot)
# Action : oui (gagné !)
if action=="oui":
# On augmente les points du joueur 0
pj[0]=pj[0]+1
points=pj[0]
# On nettoie la zone de texte
clear_zdt()
# On désactive la zone de texte
disable_zdt()
# On affiche un message de félicitations
mot_affiche.configure(text=f'''Bonne réponse ! Vous avez {points} point(s) !''')
# On raffraichis la fenêtre
refresh()
# On attends 3s
time.sleep(3)
# On relance un tour
jeu("tour")
if action=="affiche":
# On active la zone de texte
enable_zdt()
# On raffiche la consigne
mot_affiche.configure(text=f'''Syllabe : {syllabe_a_trouver}''')
# On raffraichis la fenêtre
refresh()
if action=="tentative":
# Message d'échec au joueur
mot_affiche.configure(text="Vous n'avez trouvé aucun mot. -1 Point :(")
# Points du joueur
pj[0]=pj[0]-1
# On nettoie la zone de texte
clear_zdt()
# On désactive la zone de texte
disable_zdt()
# On actualise la fenêtre
refresh()
# On attends 2 secondes
time.sleep(2)
# On recommence un nouveau tour
jeu("tour")
'''
_____ _ __
|_ _| | | / _|
| | _ __ | |_ ___ _ __| |_ __ _ ___ ___
| | | '_ \| __/ _ \ '__| _/ _` |/ __/ _ \
_| |_| | | | || __/ | | || (_| | (_| __/
|_____|_| |_|\__\___|_| |_| \__,_|\___\___|
'''
# Notre fenêtre Tkinter
fenetre = Tk()
# Le titre de la fenêtre
fenetre.title('BombParty')
# Les dimensions de la fenêtre
fenetre.geometry('720x200')
# On désactive la possibilité de redimensionner la fenêtre
fenetre.resizable(False, False)
# On définit un arrière-plan blanc
fenetre.config(background='lightgreen')
# On crée notre zone de texte.
# C'est dans celle-ci que le joueur entrera les mots
zonedetexte = Entry(fenetre, justify='center')
# On associe cette zonedetexte à la touche Entrée pour effectuer des actions par la suite.
zonedetexte.bind("<Return>",(lambda event: reset_zdt(zonedetexte.get())))
# On crée un écran dans lequel les informations au joueur seront affichées.
mot_affiche = Label(fenetre, text="Cliquer sur commencer, pour lancer la partie !",width=720, anchor=CENTER)
# On poisitonne notre objet dans la fenêtre.
mot_affiche.grid(sticky="s")
# On crée un bouton start
bouton_start = Button(fenetre, text="Commencer", command = print("salut"))
# On configure notre bouton afin qu'il exécute le début de notre jeu.
bouton_start.configure(command=lambda: launch_game())
##
## Ce code est à des fins de déboggage.
##
def pointeur1(event) :
x = event.x
y = event.y
print(x,y,1)
fenetre.bind("<Button-1>",pointeur1)
##
## Ce code est à des fins de déboggage.
##
# On ajoute tout nos objets à la fenêtre.
mot_affiche.pack()
zonedetexte.pack(pady=30)
zonedetexte.configure(state="disabled")
bouton_start.pack(pady=5)
# On lance l'interface.
fenetre.mainloop()