5.22: Drawing a Tile
- Page ID
def drawTile(tilex, tiley, number, adjx=0, adjy=0): # draw a tile at board coordinates tilex and tiley, optionally a few # pixels over (determined by adjx and adjy) left, top = getLeftTopOfTile(tilex, tiley) pygame.draw.rect(DISPLAYSURF, TILECOLOR, (left + adjx, top + adjy, TILESIZE, TILESIZE)) textSurf = BASICFONT.render(str(number), True, TEXTCOLOR) textRect = textSurf.get_rect() textRect.center = left + int(TILESIZE / 2) + adjx, top + int(TILESIZE / 2) + adjy DISPLAYSURF.blit(textSurf, textRect)
drawTile() function will draw a single numbered tile on the board. The
tiley parameters are the board coordinates of the tile. The number parameter is a string of the tile’s number (like
adjy keyword parameters are for making minor adjustments to the position of the tile. For example, passing 5 for
adjx would make the tile appear 5 pixels to the right of the
tiley space on the board. Passing
adjx would make the tile appear 10 pixels to the left of the space.
These adjustment values will be handy when we need to draw the tile in the middle of sliding. If no values are passed for these arguments when drawTile() is called, then by default they are set to 0. This means they will be exactly on the board space given by tilex and tiley.
The Pygame drawing functions only use pixel coordinates, so first line 4  converts the board coordinates in
tiley to pixel coordinates, which we will store in variables
getLeftTopOfTile() returns the top left corner’s coordinates). We draw the background square of the tile with a call to
pygame.draw.rect() while adding the
adjy values to left and top in case the code needs to adjust the position of the tile.
Lines 6  to 9  then create the Surface object that has the number text drawn on it. A Rect object for the Surface object is positioned, and then used to blit the Surface object to the display Surface. The
drawTile() function doesn’t call
pygame.display.update() function, since the caller of
drawTile() probably will want to draw more tiles for the rest of the board before making them appear on the screen.