Advertisement
Manusman

python3.7 Minesweeper

Dec 25th, 2019
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.04 KB | None | 0 0
  1. import tkinter as tk
  2. import random
  3. import copy
  4.  
  5.  
  6. def init_grid():
  7.     the_grid = []
  8.     for i in range(15):
  9.         for ii in range(15):
  10.             the_grid.append(create_button(ii / 40 + 0.3, i / 20 + 0.1))
  11.     return the_grid
  12.  
  13.  
  14. def init_mines(grid):
  15.     mines = []
  16.     copy_grid = copy.copy(grid)
  17.     for i in range(50):
  18.         mine = random.choice(copy_grid)
  19.         copy_grid.remove(mine)
  20.         mine_config(mine)
  21.         mines.append(mine)
  22.     return mines
  23.  
  24.  
  25. def init_spaces(grid, mine_lst):
  26.     nums = []
  27.     up_side = list(range(15))
  28.     down_side = list(range(210, 225))
  29.     left_side = list(range(0, 211, 15))
  30.     right_side = list(range(14, 225, 15))
  31.     for space in grid:
  32.         if space in mine_lst:
  33.             nums.append('M')
  34.             continue
  35.         else:
  36.             ind = grid.index(space)
  37.             num_adj_mine = 0
  38.             if ind == 0:
  39.                 for near_space in [grid[ind + 1], grid[ind + 15], grid[ind + 16]]:
  40.                     if near_space in mine_lst:
  41.                         num_adj_mine += 1
  42.             elif ind == 14:
  43.                 for near_space in [grid[ind - 1], grid[ind + 15], grid[ind + 14]]:
  44.                     if near_space in mine_lst:
  45.                         num_adj_mine += 1
  46.             elif ind == 210:
  47.                 for near_space in [grid[ind + 1], grid[ind - 15], grid[ind - 14]]:
  48.                     if near_space in mine_lst:
  49.                         num_adj_mine += 1
  50.             elif ind == 224:
  51.                 for near_space in [grid[ind - 1], grid[ind - 15], grid[ind - 16]]:
  52.                     if near_space in mine_lst:
  53.                         num_adj_mine += 1
  54.             elif ind in up_side:
  55.                 for near_space in [grid[ind - 1], grid[ind + 1], grid[ind + 15], grid[ind + 14], grid[ind + 16]]:
  56.                     if near_space in mine_lst:
  57.                         num_adj_mine += 1
  58.             elif ind in down_side:
  59.                 for near_space in [grid[ind - 1], grid[ind + 1], grid[ind - 15], grid[ind - 14], grid[ind - 16]]:
  60.                     if near_space in mine_lst:
  61.                         num_adj_mine += 1
  62.             elif ind in left_side:
  63.                 for near_space in [grid[ind + 15], grid[ind + 1], grid[ind - 15], grid[ind - 14], grid[ind + 16]]:
  64.                     if near_space in mine_lst:
  65.                         num_adj_mine += 1
  66.             elif ind in right_side:
  67.                 for near_space in [grid[ind + 15], grid[ind - 1], grid[ind - 15], grid[ind + 14], grid[ind - 16]]:
  68.                     if near_space in mine_lst:
  69.                         num_adj_mine += 1
  70.             else:
  71.                 for near_space in [grid[ind + 1], grid[ind - 1], grid[ind + 15], grid[ind + 16], grid[ind + 14], grid[ind - 16],
  72.                                    grid[ind - 15], grid[ind - 14]]:
  73.                     if near_space in mine_lst:
  74.                         num_adj_mine += 1
  75.             if num_adj_mine == 0:
  76.                 nums.append(' ')
  77.             else:
  78.                 nums.append(num_adj_mine)
  79.  
  80.     return nums
  81.  
  82.  
  83. def create_button(relx, rely):
  84.     butt = tk.Button(game, height=2, width=4)
  85.     butt.place(relx=relx, rely=rely)
  86.     butt.bind('<Button-1>', lambda event_, arg=butt: space_left(event_, arg))
  87.     butt.bind('<Button-3>', lambda event_, arg=butt: space_flagged(event_, arg))
  88.     return butt
  89.  
  90.  
  91. def space_left(event, space):
  92.     print('space left')
  93.     space['relief'] = 'sunken'
  94.     num = fin_grid[grid_lst.index(space)]
  95.     space['text'] = num
  96.     if num == 1:
  97.         space['fg'] = 'green'
  98.     elif num == 2:
  99.         space['fg'] = 'red'
  100.     elif num == 4:
  101.         space['fg'] = 'yellow'
  102.     elif num == 5:
  103.         space['fg'] = 'orange'
  104.  
  105.  
  106. def space_flagged(event, space):
  107.     print('space_flagged')
  108.     space['text'] = '⛳'
  109.     space.bind('<Button-1>', '')
  110.     space.bind('<Button-3>', lambda event_, arg=space: space_unflagged(event_, arg))
  111.  
  112.  
  113. def space_unflagged(event, space):
  114.     print('space_unflagged')
  115.     space.configure(text='')
  116.     space.bind('<Button-1>', lambda _event, arg=space: space_left(_event, arg))
  117.     space.bind('<Button-3>', lambda _event, arg=space: space_flagged(_event, arg))
  118.  
  119.  
  120. def mine_config(a_mine):
  121.     a_mine.configure(text='')
  122.     a_mine.bind('<Button-1>', mine_left)
  123.     a_mine.bind('<Button-3>', lambda event, arg=a_mine: mine_flagged(event, arg))
  124.  
  125.  
  126. def mine_left(event):
  127.     for button in mines_lst:
  128.         button.configure(text='M', bg='red')
  129.  
  130.  
  131. def mine_flagged(event, the_mine):
  132.     the_mine['text'] = '⛳'
  133.     the_mine.bind('<Button-1>', '')
  134.     the_mine.bind('<Button-3>', lambda event_, arg=the_mine: mine_unflagged(event_, arg))
  135.  
  136.  
  137. def mine_unflagged(event, mine):
  138.     mine.configure(text='')
  139.     mine.bind('<Button-1>', mine_left)
  140.     mine.bind('<Button-3>', lambda _event, arg=mine: mine_flagged(_event, arg))
  141.  
  142.  
  143. game = tk.Tk()
  144. game.geometry('1920x1080')
  145. grid_lst = init_grid()
  146. print(grid_lst)
  147. mines_lst = init_mines(grid_lst)
  148. print(mines_lst)
  149. fin_grid = init_spaces(grid_lst, mines_lst)
  150. print(fin_grid)
  151. game.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement