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
|
from tkinter import *
ordonnees=['A','B','C','D','E','F','G','H','I','J']
abscisses=['1','2','3','4','5','6','7','8','9','10']
fen = Tk()
fen.title('Joueur1')
message = Label(fen, text='Bataille navale')
message.grid(row = 0, column = 0, columnspan=2, padx=3, pady=3, sticky = W+E)
bouton_quitter = Button(fen, text='Quitter', command = fen.destroy)
bouton_quitter.grid(row = 2, column = 1, padx = 3, pady = 3, sticky = S+W+E)
bouton_reload = Button(fen, text='Recommencer')
bouton_reload.grid(row = 2, column = 0, padx = 3, pady = 3, sticky = S+W+E)
dessin = Canvas(fen, bg="blue", width=601, height=601)
dessin.grid(row = 1, column = 0, columnspan = 2, padx = 5, pady = 5)
lignes = []
for i in range(13):
lignes.append(dessin.create_line(0, 50*i+2, 603, 50*i+2, width=3))
lignes.append(dessin.create_line(50*i+2, 0, 50*i+2, 603, width=3))
for i in range(10): # lettres et chiffres de la grille
case = dessin.create_text(25, 50*i+75, text=ordonnees[i], font="Arial 16", fill="black")
case = dessin.create_text(575, 50*i+75, text=ordonnees[i], font="Arial 16", fill="black")
case = dessin.create_text(50*i+75, 25, text=abscisses[i], font="Arial 16", fill="black")
case = dessin.create_text(50*i+75, 575, text=abscisses[i], font="Arial 16", fill="black")
cases = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # Tableau
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
## Fonction bateau
bateaux=[4,3,3,2,2,2,1,1,1,1]
u = int(0)
def posBat(event) : # construction de la flotte
global b
u = int(0)
T = int(0)
if u < 10 :
b = bateaux[u]
message.configure(text='Clic sur la position du bateau à {} cases:'.format(bateaux[u]))
dessin.bind('<Button-1>', position)
u+=1
def position(event) : # clic position
""" Entrées : Un événement de la souris
Sortie : Affiche en temps réel les coordonnées de la souris dans la zone de texte"""
global l,P,c
abscisse = event.x
ordonnee = event.y
l = (ordonnee-2)//50 # Ligne du clic
P = ordonnees[l-1]
c = (abscisse-2)//50 # Colonne du clic
for j in range(2):
for k in range(2): # vérification de l'absence de voisins au clic
if cases[l-1+j][c-1+k] == 1:
message.configure(text='Clic sur la position du bateau à {} cases:'.format(bateaux[u]))
dessin.bind('<Button-1>', position)
else : # vérification de l'absence de voisins au clic
case = dessin.create_rectangle(50*c, 50*l, 50*c+50, 50*l+50, fill='grey')
case = dessin.create_text(50*c+25, 50*l+25, text=b, font="Arial 16", fill="white" )
message.configure(text='Cliquer à droite ou en dessous de ( {} ; {} )'.format(P, c))
dessin.bind('<Button-1>', dirBat)
def dirBat(event) : # choix vertical ou horizontal
global l1,P1,c1,u
abscisse = event.x
ordonnee = event.y
l1 = (ordonnee-2)//50
P1 = ordonnees[l1-1]
c1 = (abscisse-2)//50
T = int(0)
''' message.configure(text='Cliquer à droite ou en dessous de ( {} ; {} )'.format(P, c)) '''
if c1 != c and l1 == l: # navire horizontal
for n in range(b):
for j in range(2): # vérification de l'absence de voisins horizontaux
if cases[l-1+j][c+1+n] == 1:
message.configure(text='Clic sur la position du bateau à {} cases:'.format(bateaux[u]))
dessin.bind('<Button-1>', position)
else:
cases[l][c+n] = 1
T += 1
case = dessin.create_rectangle(50*(c+n), 50*l, 50*(c+n)+50, 50*l+50, fill='grey')
case = dessin.create_text(50*(c+n)+25, 50*l+25, text=b, font="Arial 16", fill="white")
if c1 == c and l1 != l: # navire vertical
for n in range(b):
for j in range(2): # vérification de l'absence de voisins verticaux
if cases[l+1+n][c-1+j] == 1:
message.configure(text='Clic sur la position du bateau à {} cases:'.format(bateaux[u]))
dessin.bind('<Button-1>', position)
else:
cases[l+n][c] = 1
T += 1
case = dessin.create_rectangle(50*c, 50*(l+n), 50*c+50, 50*(l+n)+50, fill='grey')
case = dessin.create_text(50*c+25, 50*(l+n)+25, text=b, font="Arial 16", fill="white")
print(b)
print(cases)
##----- Programme principal -----##
message.configure(text='Clic pour démarrer :')
dessin.bind('<Button-1>', posBat)
fen.mainloop() # Boucle d'attente des événements |
Partager