Break functions up into smaller functions to improve readability
This commit is contained in:
		
							parent
							
								
									2f39ee536b
								
							
						
					
					
						commit
						4207baceb4
					
				
							
								
								
									
										53
									
								
								main.py
								
								
								
								
							
							
						
						
									
										53
									
								
								main.py
								
								
								
								
							|  | @ -8,7 +8,7 @@ from pygame.locals import * | ||||||
| from square import Square | from square import Square | ||||||
| from board import Board | from board import Board | ||||||
| 
 | 
 | ||||||
| def play_game(rows, cols, mines): | def make_board(rows, cols, mines): | ||||||
|     pygame.init() |     pygame.init() | ||||||
| 
 | 
 | ||||||
|     # Pygame/ALSA has a bug that results in high CPU usage. This line reduces |     # Pygame/ALSA has a bug that results in high CPU usage. This line reduces | ||||||
|  | @ -19,11 +19,14 @@ def play_game(rows, cols, mines): | ||||||
|     DISPLAYSURF.fill((185,185,185)) |     DISPLAYSURF.fill((185,185,185)) | ||||||
|     pygame.display.set_caption("Minesweeper") |     pygame.display.set_caption("Minesweeper") | ||||||
| 
 | 
 | ||||||
|     board = Board((rows, cols), mines, DISPLAYSURF) |  | ||||||
| 
 |  | ||||||
|     # Prevents mouse movement from counting as an event, reducing CPU usage |     # Prevents mouse movement from counting as an event, reducing CPU usage | ||||||
|     pygame.event.set_blocked(MOUSEMOTION) |     pygame.event.set_blocked(MOUSEMOTION) | ||||||
| 
 | 
 | ||||||
|  |     return Board((rows, cols), mines, DISPLAYSURF) | ||||||
|  | 
 | ||||||
|  | def play_game(rows, cols, mines): | ||||||
|  |     board = make_board(rows, cols, mines) | ||||||
|  | 
 | ||||||
|     # Creates an event that will cause the board timer to update every 100ms |     # Creates an event that will cause the board timer to update every 100ms | ||||||
|     UPDATETIMER = pygame.USEREVENT + 1 |     UPDATETIMER = pygame.USEREVENT + 1 | ||||||
|     pygame.time.set_timer(UPDATETIMER, 100) |     pygame.time.set_timer(UPDATETIMER, 100) | ||||||
|  | @ -73,7 +76,7 @@ def ask_to_play_again(): | ||||||
|     question = tkinter.Label(play_again_box, text="Play again?") |     question = tkinter.Label(play_again_box, text="Play again?") | ||||||
|     question.pack(side=tkinter.TOP) |     question.pack(side=tkinter.TOP) | ||||||
| 
 | 
 | ||||||
|     # Yes will destroy this Tk box and consequently reoption the option_box |     # Yes will destroy this Tk box and consequently reopen the option_box | ||||||
|     yes = tkinter.Button(play_again_box, text="Yes", |     yes = tkinter.Button(play_again_box, text="Yes", | ||||||
|             command=play_again_box.destroy) |             command=play_again_box.destroy) | ||||||
|     yes.pack(side=tkinter.LEFT) |     yes.pack(side=tkinter.LEFT) | ||||||
|  | @ -93,41 +96,27 @@ def play_pressed(option_box): | ||||||
|         messagebox.showerror("Input Error", "Please enter whole numbers!") |         messagebox.showerror("Input Error", "Please enter whole numbers!") | ||||||
|         return |         return | ||||||
| 
 | 
 | ||||||
|     if not inputs_are_valid(rows, cols, mines): |     if inputs_are_valid(rows, cols, mines): | ||||||
|         return |         option_box.destroy() | ||||||
|  |         play_game(rows, cols, mines) | ||||||
| 
 | 
 | ||||||
|     option_box.destroy() |         ask_to_play_again() | ||||||
|     play_game(rows, cols, mines) |  | ||||||
| 
 | 
 | ||||||
|     ask_to_play_again() | def add_option_for(var, lower, upper, window): | ||||||
|  |     frame = tkinter.Frame(window) | ||||||
|  |     frame.pack() | ||||||
|  |     label = tkinter.Label(frame, text=var + ":") | ||||||
|  |     label.pack(side=tkinter.LEFT) | ||||||
|  |     val = tkinter.Spinbox(frame, from_=lower, to=upper, width=len(str(upper))) | ||||||
|  |     val.pack(side=tkinter.LEFT) | ||||||
| 
 | 
 | ||||||
| def main(): | def main(): | ||||||
|     while True: |     while True: | ||||||
|         option_box = tkinter.Tk() |         option_box = tkinter.Tk() | ||||||
| 
 | 
 | ||||||
|         # Sets up row number input |         add_option_for("Rows", 5, 99, option_box) | ||||||
|         row_frame = tkinter.Frame(option_box) |         add_option_for("Columns", 5, 99, option_box) | ||||||
|         row_frame.pack() |         add_option_for("Mines", 1, 9801, option_box) | ||||||
|         row_label = tkinter.Label(row_frame, text="Rows:") |  | ||||||
|         row_label.pack(side=tkinter.LEFT) |  | ||||||
|         rows = tkinter.Spinbox(row_frame, from_=5, to=99, width=2) |  | ||||||
|         rows.pack(side=tkinter.LEFT) |  | ||||||
| 
 |  | ||||||
|         # Sets up column number input |  | ||||||
|         col_frame = tkinter.Frame(option_box) |  | ||||||
|         col_frame.pack() |  | ||||||
|         col_label = tkinter.Label(col_frame, text="Columns:") |  | ||||||
|         col_label.pack(side=tkinter.LEFT) |  | ||||||
|         cols = tkinter.Spinbox(col_frame, from_=5, to=99, width=2) |  | ||||||
|         cols.pack(side=tkinter.LEFT) |  | ||||||
| 
 |  | ||||||
|         # Sets up mine number input |  | ||||||
|         mine_frame = tkinter.Frame(option_box) |  | ||||||
|         mine_frame.pack() |  | ||||||
|         mine_label = tkinter.Label(mine_frame, text="Mines:") |  | ||||||
|         mine_label.pack(side=tkinter.LEFT) |  | ||||||
|         mines = tkinter.Spinbox(mine_frame, from_=0, to=9800, width=4) |  | ||||||
|         mines.pack(side=tkinter.LEFT) |  | ||||||
| 
 | 
 | ||||||
|         # The lambda is so play_pressed(option_box) is not immediately executed |         # The lambda is so play_pressed(option_box) is not immediately executed | ||||||
|         # Otherwise the window will close early |         # Otherwise the window will close early | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue