Untitled

mail@pastecode.io avatar
unknown
python
19 days ago
4.1 kB
2
Indexable
Never
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()
Leave a Comment