Page 1 of 1

Minesweeper Python Tkinter.

Posted: Wed May 05, 2021 10:34 pm
by javesike1262
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.

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.