# Boucle principale du jeu
import tkinter
# header
from numpy import *
from functools import partial
from functions import *
from IA_C4 import *
from tkinter import *
from tkinter import messagebox
from PIL import Image, ImageTk
colonnes = 7
lignes = 6
tk_img = [0 for x in range(colonnes * lignes)]
top = Tk() # Création de la fenêtre de jeu
[Link]("720x680")
# Demander au joueur le mode de jeu ; contre IA ou joueur
def jouer_ia():
"""Fonction du bouton demandant au joueur s'il veut jouer contre une IA
Assigne des variables pour être réutilisées plus tard dans la boucle
principale"""
[Link](True)
[Link](True)
[Link]()
[Link]()
def jouer_joueur():
"""Fonction du bouton demandant au joueur s'il veut jouer contre une IA
Détruis les boutons et laisse le jeu continuer"""
[Link](True)
[Link]()
[Link]()
ia = [Link](value=False) # Assignation d'une variable tkinter pour
vérifier si le joueur souhaite jouer contre IA
jouer = [Link](value=False) # Variable d'attendre de pressage du
boutons
button = Button(top, text="Jouer contre une IA", command=lambda: jouer_ia())
[Link]() # Pour résoudre l'erreur, il fallait mettre sur deux lignes ¯\_(ツ)_
/¯
button1 = Button(top, text="Jouer contre un autre joueur", command=lambda:
jouer_joueur())
[Link]()
# Attendre pressage des boutons
top.wait_variable(jouer)
ia_niveau = [Link]()
def ia_niveau_set(diff):
"""Prend une difficulté en entrée et change la variable wait pour pouvoir
continuer contre les IA"""
ia_niveau.set(diff)
[Link](True)
# Demande la difficulté de l'IA
if [Link]():
wait = [Link](value=False)
button = Button(top, text="Jouer contre une IA simple", command=lambda:
ia_niveau_set(1))
[Link]()
button1 = Button(top, text="Jouer contre une IA moyenne", command=lambda:
ia_niveau_set(2))
[Link]()
button2 = Button(top, text="Jouer contre une IA difficile", command=lambda:
ia_niveau_set(3))
[Link]()
top.wait_variable(wait)
C = Canvas(top, bg="blue", height=250, width=300) # Mettre l'image du puissance 4
en bg
filename = PhotoImage(file="[Link]")
background_label = Label(top, image=filename)
background_label.place(x=0, y=0, relwidth=1, relheight=1)
[Link]()
tk_index = [Link](value=0)
tk_bool = [Link](value=False)
def coin_tkinter(coin_index):
"""Fonction qui va mettre une image du jeton de la couleur correspondante
coin_index en argument permet de savoir où placer le jeton"""
# Placer le jeton en back-end et ressortir sa ligne dans variable index
index = placer_coin(board, joueur_actif + 1, coin_index) - 1
# Associer la bonne image puis la placer
if joueur_actif:
tk_img[tk_img_index] = [Link](
[Link]('blue_coin.png').resize((60, 60))) # Prendre l'image du
dossier & taille 60x60
else:
tk_img[tk_img_index] =
[Link]([Link]('yellow_coin.png').resize((60, 60)))
coin_show = Label(top, image=tk_img[tk_img_index])
# positioner correctement
if coin_index == 0 and index == 0:
coin_show.place(x=60, y=110)
elif coin_index == 0:
coin_show.place(x=60, y=110 + 80 * index)
elif index == 0:
coin_show.place(x=60 + 90 * coin_index, y=110)
else:
coin_show.place(x=60 + 90 * coin_index, y=110 + 80 * index)
return tk_img_index + 1
def return_index(index):
"""Fonction pour donner les valeurs des boutons & changer une variable qui est
en wait_variable"""
tk_index.set(index)
tk_bool.set(True)
# Créer les boutons
for i in range(7):
# partial() pour appeler la fonction avec un argument
B = Button(top, text="Placer jeton " + str(i + 1),
command=partial(return_index, i + 1))
[Link](x=29 * (2.8 * (i + 1)), y=40)
# Puissance 4 vide avec fonction de numpy
board = zeros((lignes, colonnes))
joueur_actif = 1
tk_img_index = 0 # Valeur pour les images de l'UI
# Boucle principale du jeu
while 1:
# échange de tour du joueur
joueur_actif = not joueur_actif
# Si IA joue
if [Link]() == 1 and joueur_actif == 1:
if ia_niveau.get() == 1:
tk_img_index = coin_tkinter(ia_simple(board))
elif ia_niveau.get() == 2:
tk_img_index = coin_tkinter(ia_moyenne(board, joueur_actif))
elif ia_niveau.get() == 3:
pass
if win(board, joueur_actif + 1):
msg = [Link]("Félicitations !",
"Le joueur {0} a
gagné !".format(int(joueur_actif)))
break
elif stalemate(board, lignes):
msg = [Link]("Oopsies.. !",
"Tous les emplacement du puissance 4 sont
pleins, c'est une égalité !")
break
continue
top.wait_variable(tk_bool) # Attendre qu'un bouton soit appuyé
if board[0][tk_index.get() - 1] > 0:
msg = [Link]("Attention !", "Il n'est pas possible de mettre
un jeton au-dessus !")
continue
tk_img_index = coin_tkinter(tk_index.get() - 1) # Placer le jeton en front et
back end
if win(board, joueur_actif + 1):
msg = [Link]("Félicitations !",
"Le joueur {0} a
gagné !".format(int(joueur_actif)))
break
elif stalemate(board, lignes):
msg = [Link]("Oopsies.. !",
"Tous les emplacement du puissance 4 sont pleins,
c'est une égalité !")
break
# fin du jeu
[Link]()