Se connecter

Informatique

Programmation

Sujet : un projet en ISN
1
Matzo
Niveau 1
20 mai 2018 à 23:15:31

Bonjour je suis actuellement en terminale et je suis entrain de finaliser mon projet d'ISN. Mon projet est un jeu c'est puissance 4 rien de très complique sauf que je n’arrive pas a écrire une ligne de code qui me permet de détermine le gagnant . Merci pour ceux qui me repondrons
voici mon programme :

from tkinter import*

J1=input("Entre ton nom pour la couleur rouge : ")# On donne le noms des joueurs aux variables J1 et J2 qu'on insère dans le jeu par un bouton
J2=input("Entre ton nom pour la couleur jaune : ")
input("Appuyer sur 'Entrer' pour commencer à jouer ! ")

#---------------------------------------------definition-----------------------------------------------
def pos_arrondie(x,y):
    global cote
    x1=cote*int(x/cote)
    y1=cote*int(y/cote)
    return x1,y1

def animation():
    global ydebut,yfin,pion,cote,x
    can.coords(pion,x,ydebut,x+cote,ydebut+cote)
    ydebut+=50
    i=int(x/cote)
    if ydebut<=yfin[i]:
        can.after(50,animation)
        

def cercle(event):
    global cote,pion,ydebut,yfin,x,y,compteur
    ydebut=0
    x,y=pos_arrondie(event.x,event.y)
    if yfin==[0, 0, 0, 0, 0, 0, 0]:# Lorque tout les pions arrive en Y=0 on a joué les 42 pions et c'est donc la fin de la partie
            pass
    else:
        if compteur%2: # Les pions altèrnent entre le rouge et le jaune pour chaque joueur puisse jouer à tour de role
            pion=can.create_oval(x,ydebut,x+100,ydebut+100,fill="yellow",tags="pions")
            compteur+=1
            i=int(x/cote)
            yfin[i]-=cote
            print(yfin)
            animation()

        else :
            pion=can.create_oval(x,ydebut,x+100,ydebut+100,fill="red",tags="pions")
            compteur+=1
            i=int(x/cote)
            yfin[i]-=cote
            print(yfin)
            animation()
        print(compteur)
    

def regle_du_jeu() :
    fenetre_regle_du_jeu = Tk()# Création de la fenetre_regle_du_jeu
    fenetre_regle_du_jeu.title("Règle du jeu")# Nom de la fenêtre

    # Définition du texte à afficher
    texte ="""
           RÈGLE DU JEU :
           ------------

Le jeu se pratique avec une grille verticale, traditionnellement de 7 colonnes et 6 lignes.
Chaque joueur joue alternativement en laissant tomber un de ses jetons du haut d'une des colonnes.
Ce jeton remplit donc la plus basse case inoccupée de la colonne.
Le vainqueur est le premier à obtenir un alignement de 4 jetons(horizontalement, verticalement, ou en diagonale).
Il est possible de remplir la grille sans qu'aucun des 2 joueur n'ait gagné... il y a alors match nul.

"""

    #Définition de la zone de texte
    champ_info = Label(fenetre_regle_du_jeu, text = texte)# On appelle la fenêtre et on insère le texte
    champ_info.pack()

    
    #Bouton pour fermer la fenêtre des règles du jeu
    bouton_ok = Button(fenetre_regle_du_jeu, text="Fermer", command=fenetre_regle_du_jeu.destroy)
    bouton_ok.pack(side=RIGHT)

def nouvelle_partie():
    global cote,yfin,compteur
    can.delete("pions")# On supprime tout les pions
    yfin=[6*cote,6*cote,6*cote,6*cote,6*cote,6*cote,6*cote]# On réinitialise Yfin pour rejouer tout en bas
    compteur=0 #Rénitialisation du compteur qui doit être inférieur à 42 coups
    
#-------------------------------------------Programme-----------------------------------------------
# On applique une valeur à nos variables
cote=100
compteur=0
yfin=[6*cote,6*cote,6*cote,6*cote,6*cote,6*cote,6*cote]

#On paramètre ici l'interface de jeu
fen = Tk()# Ouverture de la fenêtre de jeu
fen.title("Puissance 4")# Nom de la fenêtre
can=Canvas(fen,width=700,height=623)#Taille de la zone de jeu
for i in range(6):#Création du quadrillage
    can.create_line(0,i*cote,7*cote,i*cote)
for j in range(7):
    can.create_line(j*cote,0,j*cote,6*cote)
can.pack(side=BOTTOM)
b1=Button(fen,text='Quitter',command=fen.quit,fg='blue',bg='black')#Bouton qui nous sert à quitter le jeu
b1.pack(side=BOTTOM)
bou=Button(fen,text='REGLE DU JEU',fg='blue',bg='black',command = regle_du_jeu)#Bouton qui appelle la fonction qui nous affiche les règles du jeu
bou.pack()
bou=Button(fen,text='Nouvelle partie',fg='blue',bg='black',command =nouvelle_partie)#Bouton qui appelle la fonction de nouvelle partie
bou.pack(side=BOTTOM,pady=10)
bou=Button(fen,text=J1,fg='black',bg='red')#Bouton qui sert à afficher le nom du joueur 1
bou.pack(side=LEFT)
bou=Button(fen,text=J2,fg='black',bg='yellow')#Bouton qui sert à afficher le nom du joueur 2
bou.pack(side=RIGHT)
can.bind("<Button-1>",cercle)#Appelle la fonction qui déssine un cercle par un clic gauche
fen.mainloop()
fen.destroy()
Kasmir
Niveau 10
21 mai 2018 à 11:34:20

j'ai pas vraiment lu le code mais j'imagine que tu as utilisé un tableau a 2 dimensions pour représenter la grille. Dans ce cas à chaque fois qu'un joueur joue tu peux vérifier dans les toutes directions si il forme une ligne de 4. C'est surement pas la solution la plus optimale mais c'est assez simple à implémenter

1
Sujet : un projet en ISN
   Retour haut de page
Consulter la version web de cette page