Reduce CPU usage by waiting for event, and make updating the timer an event

This commit is contained in:
filifa 2024-03-19 20:38:20 -05:00
parent c7c0c1220d
commit 5845156e15
1 changed files with 17 additions and 11 deletions

10
main.py
View File

@ -10,6 +10,7 @@ from board import Board
def start_game(rows, cols, mines): def start_game(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
# the CPU usage # the CPU usage
pygame.mixer.quit() pygame.mixer.quit()
@ -23,19 +24,24 @@ def start_game(rows, cols, mines):
# 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)
# Creates an event that will cause the board timer to update every 100ms
UPDATETIMER = pygame.USEREVENT + 1
pygame.time.set_timer(UPDATETIMER, 100)
while True: while True:
board.update_mine_counter() board.update_mine_counter()
board.update_timer()
board.check_for_win() board.check_for_win()
pygame.display.update() pygame.display.update()
if board.game_lost or board.game_won: if board.game_lost or board.game_won:
break break
for event in pygame.event.get(): event = pygame.event.wait()
if event.type == QUIT: if event.type == QUIT:
pygame.quit() pygame.quit()
sys.exit() sys.exit()
elif event.type == UPDATETIMER:
board.update_timer()
elif event.type == MOUSEBUTTONUP and event.button == 1: elif event.type == MOUSEBUTTONUP and event.button == 1:
if not board.game_started: if not board.game_started:
board.place_mines(event.pos) board.place_mines(event.pos)