in the boardwidth and boardheight constantsmultiplied by the size of the tiles (stored in the tilesize constantthe rectangle we draw on line will have thickness of pixelsso we will move the boarder pixels to the left and above where the top and left variables point so the thickness of the line won' overlap the tiles we will also add to the width and length ( of those pixels are to compensate for moving the rectangle to the left and updrawing the buttons displaysurf blit(reset_surfreset_rectdisplaysurf blit(new_surfnew_rectdisplaysurf blit(solve_surfsolve_rectfinallywe draw the buttons off to the slide of the screen the text and position of these buttons never changeswhich is why they were stored in constant variables at the beginning of the main(function animating the tile slides def slideanimation(boarddirectionmessageanimationspeed) notethis function does not check if the move is valid blankxblanky getblankposition(board if direction =up movex blankx movey blanky elif direction =down movex blankx movey blanky elif direction =left movex blankx movey blanky elif direction =right movex blankx movey blanky the first thing our tile sliding animation code needs to calculate is where the blank space is and where the moving tile is the comment on line reminds us that the code that calls slideanimation(should make sure that the slide it passes for the direction parameter is valid move to make email questions to the authoral@inventwithpython com