Untitled
unknown
python
a year ago
4.1 kB
10
Indexable
import tkinter
from tkinter import *
import random
import tkinter.messagebox
import sys
sys.setrecursionlimit(10**6)
window = Tk()
window.title("Campo Minato")
righe = 3
colonne = 3
bombe = 1
griglia = []
def crea_griglia(righe, colonne):
for i in range(righe):
griglia.append([])
for j in range(colonne):
btn = Button(window, width=4, height=2, bg="gray")
btn.grid(row=i, column=j)
btn.bind("<Button-1>", scopri_cella_ascoltatore)
dict = {
"bottone" : btn,
"etichetta" : 0,
"scoperta" : False
}
griglia[i].append(dict)
def crea_bombe(n_bombe:int, righe:int, colonne:int):
global celle_da_scoprire
celle_da_scoprire = righe * colonne - n_bombe
global griglia
posizionate = 0
while n_bombe != posizionate:
r = random.randrange(righe)
c = random.randrange(colonne)
if griglia[r][c]["etichetta"] != -1:
griglia[r][c]["etichetta"] = -1
posizionate += 1
def conta_bombe_vicine(griglia):
righe = len(griglia)
colonne = len(griglia[0])
for i in range(righe):
for j in range(colonne):
if griglia[i][j]['etichetta'] != -1:
ctr = 0
if i > 0 and j > 0 and griglia[i-1][j-1]['etichetta'] == -1:
ctr += 1
if i > 0 and griglia[i-1][j]['etichetta'] == -1:
ctr += 1
if i > 0 and j < colonne-1 and griglia[i-1][j+1]['etichetta'] == -1:
ctr += 1
if j > 0 and griglia[i][j-1]['etichetta'] == -1:
ctr += 1
if j < colonne-1 and griglia[i][j+1]['etichetta'] == -1:
ctr += 1
if i < righe-1 and j > 0 and griglia[i+1][j-1]['etichetta'] == -1:
ctr += 1
if i < righe-1 and griglia[i+1][j]['etichetta'] == -1:
ctr += 1
if i < righe-1 and j < colonne-1 and griglia[i+1][j+1]['etichetta'] == -1:
ctr += 1
griglia[i][j]['etichetta'] = ctr
def scopri_cella(x:int, y: int):
global griglia
global celle_da_scoprire
griglia[x][y]["bottone"].config(text=griglia[x][y]["etichetta"])
griglia[x][y]["scoperta"] = True
if griglia[x][y]["etichetta"] == -1: # controllo sconfitta
tkinter.messagebox.showerror("Sconfitta","Hai perso davvero, loser! (Cadel deluso😢😢)")
else:
celle_da_scoprire -= 1
if celle_da_scoprire == 0:
tkinter.messagebox.showinfo("Vittoria","Hai vinto! Cadel e' fiero di te😊")
if griglia[x][y]["etichetta"] == 0:
righe = len(griglia)
colonne = len(griglia[0])
# y = colonne
# x = righe
if x > 0 and y > 0 and griglia[x-1][y-1]["scoperta"] == False:
scopri_cella(x-1, y-1)
if x > 0 and griglia[x-1][y]["scoperta"] == False:
scopri_cella(x-1,y)
if x > 0 and y < colonne-1 and griglia[x-1][y+1]["scoperta"] == False:
scopri_cella(x-1, y+1)
if y > 0 and griglia[x][y-1]["scoperta"] == False:
scopri_cella(x,y-1)
if y < colonne - 1 and griglia[x][y+1]["scoperta"] == False:
scopri_cella(x,y+1)
if x < righe-1 and y > 0 and griglia[x+1][y-1]["scoperta"] == False:
scopri_cella(x+1,y-1)
if x < righe-1 and griglia[x+1][y]["scoperta"] == False:
scopri_cella(x+1,y)
if x < righe-1 and y < colonne-1 and griglia[x+1][y+1]["scoperta"] == False:
scopri_cella(x+1,y+1)
def scopri_cella_ascoltatore(event):
global griglia
x = event.widget.grid_info()['row']
y = event.widget.grid_info()['column']
scopri_cella(x, y)
crea_griglia(righe, colonne)
crea_bombe(bombe, righe, colonne)
conta_bombe_vicine(griglia)
window.mainloop()Editor is loading...
Leave a Comment