elif hasWon(revealedBoxes): # check if all pairs found gameWonAnimation(mainBoard) pygame.time.wait(2000) # Reset the board mainBoard = getRandomizedBoard() revealedBoxes = generateRevealedBoxesData(False) # Show the fully unrevealed board for a second. drawBoard(mainBoard, revealedBoxes) pygame.display.update() pygame.time.wait(1000) # Replay the start game animation. startGameAnimation(mainBoard) firstSelection = None # reset firstSelection variable
Otherwise, if line 97’s condition was
False, then the two icons must be a match. The program doesn’t really have to do anything else to the boxes at that point: it can just leave both boxes in the revealed state. However, the program should check if this was the last pair of icons on the board to be matched. This is done inside our
hasWon() function, which returns
True if the board is in a winning state (that is, all of the boxes are revealed).
If that is the case, we want to play the "game won" animation by calling
gameWonAnimation(), then pause slightly to let the player revel in their victory, and then reset the data structures in
revealedBoxes to start a new game.
Line 15  plays the "start game" animation again. After that, the program execution will just loop through the game loop as usual, and the player can continue playing until they quit the program.
No matter if the two boxes were matching or not, after the second box was clicked line 16  will set the
firstSelection variable back to
None so that the next box the player clicks on will be interpreted as the first clicked box of a pair of possibly matching icons.