Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- import random
- import copy
- def init_grid():
- the_grid = []
- for i in range(15):
- for ii in range(15):
- the_grid.append(create_button(ii / 40 + 0.3, i / 20 + 0.1))
- return the_grid
- def init_mines(grid):
- mines = []
- copy_grid = copy.copy(grid)
- for i in range(50):
- mine = random.choice(copy_grid)
- copy_grid.remove(mine)
- mine_config(mine)
- mines.append(mine)
- return mines
- def init_spaces(grid, mine_lst):
- nums = []
- up_side = list(range(15))
- down_side = list(range(210, 225))
- left_side = list(range(0, 211, 15))
- right_side = list(range(14, 225, 15))
- for space in grid:
- if space in mine_lst:
- nums.append('M')
- continue
- else:
- ind = grid.index(space)
- num_adj_mine = 0
- if ind == 0:
- for near_space in [grid[ind + 1], grid[ind + 15], grid[ind + 16]]:
- if near_space in mine_lst:
- num_adj_mine += 1
- elif ind == 14:
- for near_space in [grid[ind - 1], grid[ind + 15], grid[ind + 14]]:
- if near_space in mine_lst:
- num_adj_mine += 1
- elif ind == 210:
- for near_space in [grid[ind + 1], grid[ind - 15], grid[ind - 14]]:
- if near_space in mine_lst:
- num_adj_mine += 1
- elif ind == 224:
- for near_space in [grid[ind - 1], grid[ind - 15], grid[ind - 16]]:
- if near_space in mine_lst:
- num_adj_mine += 1
- elif ind in up_side:
- for near_space in [grid[ind - 1], grid[ind + 1], grid[ind + 15], grid[ind + 14], grid[ind + 16]]:
- if near_space in mine_lst:
- num_adj_mine += 1
- elif ind in down_side:
- for near_space in [grid[ind - 1], grid[ind + 1], grid[ind - 15], grid[ind - 14], grid[ind - 16]]:
- if near_space in mine_lst:
- num_adj_mine += 1
- elif ind in left_side:
- for near_space in [grid[ind + 15], grid[ind + 1], grid[ind - 15], grid[ind - 14], grid[ind + 16]]:
- if near_space in mine_lst:
- num_adj_mine += 1
- elif ind in right_side:
- for near_space in [grid[ind + 15], grid[ind - 1], grid[ind - 15], grid[ind + 14], grid[ind - 16]]:
- if near_space in mine_lst:
- num_adj_mine += 1
- else:
- for near_space in [grid[ind + 1], grid[ind - 1], grid[ind + 15], grid[ind + 16], grid[ind + 14], grid[ind - 16],
- grid[ind - 15], grid[ind - 14]]:
- if near_space in mine_lst:
- num_adj_mine += 1
- if num_adj_mine == 0:
- nums.append(' ')
- else:
- nums.append(num_adj_mine)
- return nums
- def create_button(relx, rely):
- butt = tk.Button(game, height=2, width=4)
- butt.place(relx=relx, rely=rely)
- butt.bind('<Button-1>', lambda event_, arg=butt: space_left(event_, arg))
- butt.bind('<Button-3>', lambda event_, arg=butt: space_flagged(event_, arg))
- return butt
- def space_left(event, space):
- print('space left')
- space['relief'] = 'sunken'
- num = fin_grid[grid_lst.index(space)]
- space['text'] = num
- if num == 1:
- space['fg'] = 'green'
- elif num == 2:
- space['fg'] = 'red'
- elif num == 4:
- space['fg'] = 'yellow'
- elif num == 5:
- space['fg'] = 'orange'
- def space_flagged(event, space):
- print('space_flagged')
- space['text'] = '⛳'
- space.bind('<Button-1>', '')
- space.bind('<Button-3>', lambda event_, arg=space: space_unflagged(event_, arg))
- def space_unflagged(event, space):
- print('space_unflagged')
- space.configure(text='')
- space.bind('<Button-1>', lambda _event, arg=space: space_left(_event, arg))
- space.bind('<Button-3>', lambda _event, arg=space: space_flagged(_event, arg))
- def mine_config(a_mine):
- a_mine.configure(text='')
- a_mine.bind('<Button-1>', mine_left)
- a_mine.bind('<Button-3>', lambda event, arg=a_mine: mine_flagged(event, arg))
- def mine_left(event):
- for button in mines_lst:
- button.configure(text='M', bg='red')
- def mine_flagged(event, the_mine):
- the_mine['text'] = '⛳'
- the_mine.bind('<Button-1>', '')
- the_mine.bind('<Button-3>', lambda event_, arg=the_mine: mine_unflagged(event_, arg))
- def mine_unflagged(event, mine):
- mine.configure(text='')
- mine.bind('<Button-1>', mine_left)
- mine.bind('<Button-3>', lambda _event, arg=mine: mine_flagged(_event, arg))
- game = tk.Tk()
- game.geometry('1920x1080')
- grid_lst = init_grid()
- print(grid_lst)
- mines_lst = init_mines(grid_lst)
- print(mines_lst)
- fin_grid = init_spaces(grid_lst, mines_lst)
- print(fin_grid)
- game.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement