0% ont trouvé ce document utile (0 vote)
5 vues4 pages

Jeu Puissance 4 avec IA en Python

Transféré par

badpokemon63
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues4 pages

Jeu Puissance 4 avec IA en Python

Transféré par

badpokemon63
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

# 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]()

Vous aimerez peut-être aussi