1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
| #############################################################IMPORTATION################################################################
from tkinter import*
from tkinter.messagebox import *
#############################################################DEFINITION#################################################################
def regle() :
showinfo("Règle","Le principe de se casse tête est de transferer les blocs se trouvant dans la première colonne sur la troisième dans le même ordre. "
"On ne peut déplacé qu'un seul bloc a la fois et mettre un bloc plus petit sur un plus grand mais pas l'inverse. "
"A vous de jouez.", default = 'ok')
def jouer() :
global valeur
Can1.delete(ALL)
valeur=0
# création des lignes et des colonnes du tableau
for i in range( nbColonnes+1 ):
Can1.create_line( x0+cc*i, y0, x0+cc*i, y0 + nbLignes*cl )
for i in range( nbLignes+1 ):
Can1.create_line( x0, y0+cl*i, x0+nbColonnes*cc , y0+cl*i )
fenetre.update()
# création des images dans le tableau
Can1.create_image(182,107,image = C1)
Can1.create_image(182,257,image = C2)
Can1.create_image(182,407,image = C3)
Can1.create_image(182,557,image = C4)
Can1.create_image(182,707.5,image = C5)
def caseClicG(event):
global valeur
# détermine les coordonnées du clic dans x et y
x, y = event.x, event.y
# calcule la ligne et la colonne correspondant au clic
colonne = int((x-x0)/cc)
ligne = int((y-y0)/cl)+1
print(ligne,colonne)
# modifie la valeur de la case dans le tableau
if tableau[ligne][colonne] != 0 and tableau[ligne-1][colonne] == 0 and valeur == 0:
valeur = tableau[ligne][colonne]
print("valeur : ", valeur)
tableau[ligne][colonne] = 0
print(ligne,colonne)
# créer un rectangle blanc pour faire disparaitrre l'image
Can1.create_rectangle((colonne*300)+x0,(ligne*150)+y0,(colonne+1)*300+x0,(ligne-1)*150+y0, fill = 'white')
else :
showinfo('ATTENTION', 'VOUS NE POUVEZ PAS EFFECTUER CE MOUVEMENT')
print (tableau)
def caseClicD(event):
global valeur
# détermine les coordonnées du clic dans x et y
x, y = event.x, event.y
# calcule la ligne et la colonne correspondant au clic
colonne = int((x-x0)/cc)
ligne = int((y-y0)/cl)+1
print(ligne,colonne)
# modifie la valeur de la case dans le tableau
if tableau[ligne][colonne] == 0 and tableau[ligne+1][colonne] != 0 and tableau[ligne+1][colonne] > valeur :
tableau[ligne][colonne] = valeur
# créer l'image correspondant a la valeur dans le tableau de la fenêtre tkinter
if valeur == 1 :
Can1.create_image((colonne*300)+150+x0,((ligne-1)*150)+75+y0, image = C1)
if valeur == 2 :
Can1.create_image((colonne*300)+150+x0,((ligne-1)*150)+75+y0, image = C2)
if valeur == 3 :
Can1.create_image((colonne*300)+150+x0,((ligne-1)*150)+75+y0, image = C3)
if valeur == 4 :
Can1.create_image((colonne*300)+150+x0,((ligne-1)*150)+75+y0, image = C4)
if valeur == 5 :
Can1.create_image((colonne*300)+150+x0,((ligne-1)*150)+75+y0, image = C5)
valeur = 0
else :
showinfo('ATTENTION', 'VOUS NE POUVEZ PAS EFFECTUER CE MOUVEMENT', default = 'ok')
print (tableau)
if tableau == [[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 0, 3], [0, 0, 4], [0, 0, 5], [9, 9, 9]] :
showinfo('FELICITATION', 'VOUS AVEZ REUSSI SE CASSE TÊTE. SI VOUS VOULEZ REESSAYE APPUYER SUR JOUER SINON APPUYER SUR QUITTER', default = 'ok')
##########################################################VARIABLES####################################################################
valeur = 0
nbLignes = 5 # nb de lignes
nbColonnes = 3 # nb de colonnes
cl = 150 # hauteur d'une case
cc= 300 # lageur d'une case
x0, y0 = 32, 32 # coordonnées du point en haut à gauche de la grille
tableau = [[0, 0, 0], # une ligne au dessus pour faire croire qu'il n'y a rien sur la pile
[1, 0, 0],
[2, 0, 0],
[3, 0, 0],
[4, 0, 0],
[5, 0, 0],
[9, 9, 9]] # une ligne au dessous pour faire croire qu'il y a une image
print (tableau)
###########################################################CANVAS######################################################################
fenetre = Tk()
Can1 = Canvas( fenetre, height = 800, width = 1000, bg = "white" )
Can1.pack( side = LEFT )
#importation des images
C1 = PhotoImage ( file = "rouge_1.gif") # Premier carrée
C2 = PhotoImage ( file = "rouge_2.gif") # Deuxième carrée
C3 = PhotoImage ( file = "rouge_3.gif") # Troisième carrée
C4 = PhotoImage ( file = "rouge_4.gif") # Quatrième carrée
C5 = PhotoImage ( file = "rouge_5.gif") # Cinquième carrée
texte1 = Label(fenetre, text='Clic gauche sélectionne et clic droit déplace')
texte1.pack()
Can1.bind("<Button-1>", caseClicG)
Can1.bind("<Button-3>", caseClicD)
quitter = Button( fenetre, text = "Quitter", command = fenetre.destroy )
quitter.pack( side = BOTTOM )
jouer = Button( fenetre, text = "Jouer", command = jouer )
jouer.pack( side = BOTTOM )
regle = Button( fenetre, text = "Règle", command = regle )
regle.pack( side = BOTTOM )
Can1.pack()
fenetre.mainloop() |
Partager