checkForQuit() for event in pygame.event.get(): # event handling loop if event.type == MOUSEBUTTONUP: spotx, spoty = getSpotClicked(mainBoard, event.pos, event.pos) if (spotx, spoty) == (None, None): # check if the user clicked on an option button if RESET_RECT.collidepoint(event.pos): resetAnimation(mainBoard, allMoves) # clicked on Reset button allMoves =  elif NEW_RECT.collidepoint(event.pos): mainBoard, solutionSeq = generateNewPuzzle(80) # clicked on New Game button allMoves =  elif SOLVE_RECT.collidepoint(event.pos): resetAnimation(mainBoard, solutionSeq + allMoves) # clicked on Solve button allMoves = 
Before going into the event loop, the program calls
checkForQuit() on line 1  to see if any
QUIT events have been created (and terminates the program if there have). Why we have a separate function (the
checkForQuit() function) for handling the
QUIT events will be explained later. The
for loop on line 2  executes the event handling code for any other event created since the last time
pygame.event.get() was called (or since the program started, if
pygame.event.get() has never been called before).
If the type of event was a
MOUSEBUTTONUP event (that is, the player had released a mouse button somewhere over the window), then we pass the mouse coordinates to our
getSpotClicked() function which will return the board coordinates of the spot on the board the mouse release happened. The
event.pos is the X coordinate and
event.pos is the Y coordinate.
If the mouse button release did not happen over one of the spaces on the board (but obviously still happened somewhere on the window, since a
MOUSEBUTTONUP event was created), then
getSpotClicked() will return None. If this is the case, we want to do an additional check to see if the player might have clicked on the Reset, New, or Solve buttons (which are not located on the board).
The coordinates of where these buttons are on the window are stored in the
pygame.Rect objects that are stored in the
SOLVE_RECT variables. We can pass the mouse coordinates from the Event object to the
collidepoint() method. This method will return
True if the mouse coordinates are within the Rect object’s area and