[Tkinter] jeu binero

Résolu
xenact_ Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
xenact_ Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Bonjour,


J'aurais besoin de votre aide pour mon projet d'isn. Il s'agit de coder un Binero. Il est quasiment fini à part la création des menus mais je n'arrive pas a exécuter certaines lignes de code et je ne comprend pas pourquoi. Il s'agit du dernier elif de la fonction remplacer_et_afficher(Clic). J'espère que mon code n'est pas trop brouillon et que vous arriverez a le relire.


Mes plus sincères salutations.


from random import choice
import tkinter

class variable() :
 def __init__(self):
  self.pas = 500/4
  self.marge = 100
  self.grille_choisi = []
  self.grille_verif = []
  self.fini = 0

  
var = variable()

#grille 1
a1 = [2,2,3,3] # 1 = croix; 2 = rond; 3 = croix non modifiable; 4 = rond non modifiable
b1 = [4,1,2,1]
c1 = [1,1,2,2]
d1 = [1,2,3,2]
grille1_verif = [a1,b1,c1,d1]

#grille 1 servant à la vérification
a_1 = [0,0,3,3] # 1 = croix; 2 = rond; 3 = croix non modifiable; 4 = rond non modifiable
b_1 = [4,0,0,0]
c_1 = [0,0,0,0]
d_1 = [0,0,3,0]
grille1 = [a_1,b_1,c_1,d_1] 



#grille 2
a2 = [4,2,1,1] # 1 = croix; 2 = rond; 3 = croix non modifiable; 4 = rond non modifiable
b2 = [1,2,1,2]
c2 = [1,3,2,2]
d2 = [4,1,4,1]
grille2_verif = [a2,b2,c2,d2]

#grille 2 servant à la vérification
a_2 = [4,0,0,0] # 1 = croix; 2 = rond; 3 = croix non modifiable; 4 = rond non modifiable
b_2 = [0,0,0,0]
c_2 = [0,3,0,0]
d_2 = [4,0,4,0]
grille2 = [a_2,b_2,c_2,d_2]



#associe la grille affiher au départ avec celle utile à la vérification
liste_grille1 = [grille1, grille1_verif]
liste_grille2 = [grille2, grille2_verif]

#liste contenant toutes les grilles
liste_grille = [liste_grille1, liste_grille2]



def afficher_tableau() :
 '''
 fonction qui créé la fenêtre et la grille de jeu 4*4
 '''
 global fen
 global can
 fen = tkinter.Tk()
 can = tkinter.Canvas(fen, width = 1000, height = 1000, bg = 'white')
 can.grid(row=0, column = 0)
 t = 0
 while t <= 4 :
  can.create_line(var.marge, var.marge + var.pas * t, var.marge + 500, var.marge + var.pas * t, fill = 'black')
  can.create_line(var.marge + var.pas * t, var.marge, var.marge + var.pas * t, var.marge + 500, fill = 'black')
  t += 1
 
 for ligne in range (0,4) :
  for colonne in range (0,4) :
   if var.grille_choisi[ligne][colonne] == 3 :
    can.create_line(var.marge + colonne * var.pas + 10, var.marge + ligne * var.pas + 10, var.marge + (colonne+1) * var.pas - 10, var.marge + (ligne+1) * var.pas - 10, width = 6, fill = "black")
    can.create_line(var.marge + (colonne+1) * var.pas - 10, var.marge + ligne * var.pas + 10, var.marge + colonne * var.pas + 10, var.marge + (ligne+1) * var.pas - 10, width = 6, fill = "black")
   elif var.grille_choisi[ligne][colonne] == 4 :
    can.create_oval(var.marge + colonne * var.pas + 10, var.marge + ligne * var.pas + 10, var.marge + (colonne+1) * var.pas - 10, var.marge + (ligne+1) * var.pas - 10, width = 8, fill = "white", outline = "black")
 
 can.pack()
 debut()
 fen.mainloop()
 
 

 

 
def grille_alea(liste_grille):
 '''
 fonction qui choisit une grille aléatoirement parmi la celle contenue dans la liste de grille
 '''
 var.grille_choisi = choice(liste_grille)
 var.grille_verif = var.grille_choisi[1]
 var.grille_choisi = var.grille_choisi[0]
 
 
 

def remplacer_et_afficher(Clic) :
 '''
 fonction qui créé et supprime les cercle et croix placé dans la grille
 '''
 for ligne in range (0,4):   #on parcourt chaque ligne
  for colonne in range (0,4) :  #puis chaque colonne
   #on test si le dans quel case le clic est éffectuer
   if Clic.x > var.marge + colonne * var.pas and Clic.x < var.marge + (colonne+1) * var.pas and Clic.y > var.marge + ligne * var.pas and Clic.y < var.marge + (ligne+1) * var.pas :
    #on créé une croix, un rond dans la case, ou on efface la case en fonction de l'objet dans la case
    if var.grille_choisi[ligne][colonne] == 0 :
     var.grille_choisi[ligne][colonne] = 1
     can.create_line(var.marge + colonne * var.pas + 10, var.marge + ligne * var.pas + 10, var.marge + (colonne+1) * var.pas - 10, var.marge + (ligne+1) * var.pas - 10, width = 6, fill = "blue")
     can.create_line(var.marge + (colonne+1) * var.pas - 10, var.marge + ligne * var.pas + 10, var.marge + colonne * var.pas + 10, var.marge + (ligne+1) * var.pas - 10, width = 6, fill = "blue")
    elif var.grille_choisi[ligne][colonne] == 1 :
     var.grille_choisi[ligne][colonne] = 2
     var.grille_choisi[ligne][colonne] = can.create_rectangle(var.marge + colonne * var.pas + 5, var.marge + ligne * var.pas + 5, var.marge + (colonne+1) * var.pas - 5, var.marge + (ligne+1) * var.pas - 5, width = 1, fill = "white", outline = "white")
     var.grille_choisi[ligne][colonne] = can.create_oval(var.marge + colonne * var.pas + 10, var.marge + ligne * var.pas + 10, var.marge + (colonne+1) * var.pas - 10, var.marge + (ligne+1) * var.pas - 10, width = 8, fill = "white", outline = "red")
    elif var.grille_choisi[ligne][colonne] == 2 :
     var.grille_choisi[ligne][colonne] = 0
     var.grille_choisi[ligne][colonne] = can.create_rectangle(var.marge + colonne * var.pas + 5, var.marge + ligne * var.pas + 5, var.marge + (colonne+1) * var.pas - 5, var.marge + (ligne+1) * var.pas - 5, width = 1, fill = "white", outline = "white")
     
     
     
def verification() :
 '''
 fonction qui vérifie si l'utilisateur a correctement rempli la grille
 '''
 if var.grille_choisi == var.grille_verif :
  var.fini = 1

def debut():
 can.bind_all('<Button-1>', remplacer_et_afficher)

grille_alea(liste_grille)
afficher_tableau()



EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

3 réponses

critou
 
Bonsoir.

En python, un code non indenté est incompréhensible, c'est pour cette raison que les forums fournissent des outils de mises en forme du code, ici, c'est le bouton <>.

Donc, si tu pouvais éditer ton message afin d'utiliser cette fonctionnalité, tu aurais bien plus de chances d'intéresser quiconque à essayer de t'aider.
0
Utilisateur anonyme
 
Bonsoir, un autre truc important avec les forums, ceux qui répondent sont bénévoles.
Par définition, leur urgence n'est pas de répondre à une question.
Le fait d'indiquer que c'est urgent pour toi est plutôt néfaste pour toi.
Beaucoup se disent,
encore un qui fait son devoir/travail au dernier moment, qui a séché les cours, etc... et qui veut qu'on lui sauve ses miches.
et ne lisent même pas ton message.
0
xenact_ Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Du coup c'est bon j'ai réussi a corriger seul mon problème merci quand même.
0