Minesweeper Python Tkinter.
Posted: Wed May 05, 2021 10:34 pm
Hey guys, A friend of mine and I have started working a Python Tkinter Minesweeper Game to give us an insight on how Minesweeper is coded. We have coded a minesweeper and we have the code here.
It work's just like the Minesweeper and we would like any help to get the right click function work to display the flags.
Code: Select all
import random
import tkinter
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
root = Tk()
root.title("Minesweeper")
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
mainframe = ttk.Frame(root, padding="12 12 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
# def right_click():
# global label_list
# global keep_going
# row = label.widget.grid_info()["row"]
# column = label.widget.grid_info()["column"]
# number = row * columns + column
# label_list[number].configure
def label_in(label):
global label_list
global keep_going
row = label.widget.grid_info()["row"]
column = label.widget.grid_info()["column"]
number = row * columns + column
counter = 0
if str(num_array[number]) == "X" and keep_going:
for i in range(len(label_list)):
if num_array[i] == "X":
label_list[i].configure(text = " X", relief = "sunken")
ttk.Label(mainframe, text= "You lost! Try again").grid(column= 0, row=21, columnspan=20)
keep_going = False
elif str(num_array[number]) != "X" and keep_going:
label.widget.configure(text = " " + str(num_array[number]), relief = "sunken")
label_list[number] = "FIN"
for i in range(len(label_list)):
if label_list[i] != "FIN":
counter +=1
if counter == bomb_amount:
for i in range(len(label_list)):
if num_array[i] == "X":
label_list[i].configure(text = " X", relief = "sunken")
ttk.Label(mainframe, text= "You Won! Play again").grid(column= 0, row=5, columnspan= 20)
keep_going = False
def board_create(num_array):
global label_list
label_list = []
count = 0
column = 0
row = 0
for i in range(len(num_array)):
if column == (columns):
column = 0
row += 1
# label_creation = ttk.Label(mainframe, text = " ", relief = "raised", width= 3)
label_list.append(ttk.Label(mainframe, text = " ", relief = "raised", width= 3))
label_list[i].grid(column = column, row = row)
column += 1
count+=1
label_list[i].bind("<Button-1>", label_in)
# label_list[i].bind("<Button-2>", right_click)
def get_array():
rowxcolumn = rows * columns
number_array = [0]*rowxcolumn
for i in range(bomb_amount):
bomb = random.randint(1,len(number_array) -1)
if number_array[bomb] != "X":
number_array[bomb] = "X"
double_check = 1
count = 0
[print(number_array[rowxcolumn-columns-1])]
print(len(number_array))
for i in range(len(number_array)):
if count == 0 and number_array[count] != "X" and number_array[count] < double_check:
if number_array[count+1] == "X":
number_array[count] += 1
if number_array[count+columns] == "X":
number_array[count] += 1
if number_array[count+columns+1] == "X":
number_array[count] += 1
if count == (columns) and number_array[count] != "X" and number_array[count] < double_check :
if number_array[count-1] == "X":
number_array[count] += 1
if number_array[count+columns] == "X":
number_array[count] += 1
if number_array[count+columns-1] == "X":
number_array[count] += 1
if count == (rowxcolumn-1) and number_array[count] != "X" and number_array[count] < double_check :
if number_array[count-1] == "X":
number_array[count] += 1
if number_array[count-columns] == "X":
number_array[count] += 1
if number_array[count-columns-1] == "X":
number_array[count] += 1
if count == (rowxcolumn-columns)and number_array[count] != "X" and number_array[count] < double_check:
if number_array[count+1] == "X":
number_array[count] += 1
if number_array[count-columns] == "X":
number_array[count] += 1
if number_array[count-columns+1] == "X":
number_array[count] += 1
if count < (columns) and number_array[count] != "X" and not(count == columns-1) and not(count == rowxcolumn-1) and number_array[count] < double_check and (not count == 0):
if number_array[count-1] == "X":
number_array[count] += 1
if number_array[count+1] == "X":
number_array[count] += 1
if number_array[count+columns] == "X":
number_array[count] += 1
if number_array[count+columns+1] == "X":
number_array[count] += 1
if number_array[count+columns-1] == "X":
number_array[count] += 1
if count > (rowxcolumn-columns-1) and number_array[count] != "X" and not(count == rowxcolumn-1) and not(count == rowxcolumn-columns) and number_array[count] < double_check :
if number_array[count-1] == "X":
number_array[count] += 1
if number_array[count+1] == "X":
number_array[count] += 1
if number_array[count-columns] == "X":
number_array[count] += 1
if number_array[count-columns-1] == "X":
number_array[count] += 1
if number_array[count-columns+1] == "X":
number_array[count] += 1
if count % (columns) == (columns -1) and not(count == 0) and not(count == columns-1) and not(count == rowxcolumn-1) and not(count == rowxcolumn-columns) and number_array[count] != "X" and number_array[count] < double_check :
if number_array[count-1] == "X":
number_array[count] += 1
if number_array[count+columns] == "X":
number_array[count] += 1
if number_array[count-columns] == "X":
number_array[count] += 1
if number_array[count-columns-1] == "X":
number_array[count] += 1
if number_array[count+columns-1] == "X":
number_array[count] += 1
if count % (columns) == 0 and not(count == 0) and not(count == columns-1) and not(count == rowxcolumn-1) and not(count == rowxcolumn-columns-1) and number_array[count] != "X" and count < (rowxcolumn-columns-1) and number_array[count]< double_check:
if number_array[count+1] == "X":
number_array[count] += 1
if number_array[count+columns] == "X":
number_array[count] += 1
if number_array[count-columns] == "X":
number_array[count] += 1
if number_array[count-columns+1] == "X":
number_array[count] += 1
if number_array[count+columns+1] == "X":
number_array[count] += 1
if not(count % (columns) == 0) and not(count%columns == (columns-1)) and count > columns and count < (rowxcolumn-columns-1) and number_array[count] != "X" and number_array[count] < double_check:
if number_array[count+1] == "X":
number_array[count] += 1
if number_array[count-1] == "X":
number_array[count] += 1
if number_array[count+columns] == "X":
number_array[count] += 1
if number_array[count-columns] == "X":
number_array[count] += 1
if number_array[count-columns+1] == "X":
number_array[count] += 1
if number_array[count-columns-1] == "X":
number_array[count] += 1
if number_array[count+columns+1] == "X":
number_array[count] += 1
if number_array[count+columns-1] == "X":
number_array[count] += 1
count += 1
double_check += 1
for i in range(len(number_array)):
print(str(number_array[i]), end = " ")
if i % columns == columns - 1:
print("")
count = 0
return number_array
bomb_amount = 30
rows = 20
columns = 20
num_array = get_array()
label_list = []
board_create(num_array)
keep_going = True
root.mainloop()
It work's just like the Minesweeper and we would like any help to get the right click function work to display the flags.