Код увязает во всех этих координатах!
Что если бы был какой-то способ хранить все о гоблине вместе, чтобы он был аккуратным и передавался как параметр илихранится в списке.
Итак, что мы знаем о гоблине ... ну, у него есть:
- координата игровой сетки
- изображение(Поверхность PyGame)
Это может быть легко помещено в список Python (как массив):
goblin1 = [ 0, 0, walkLeft ]
goblin2 = [ 1, 0, walkLeft ]
...
Они могут храниться в другом списке:
goblins = [ goblin1, goblin2, ... ]
Упрощение drawPieces()
:
# window border constants
X_BORDER = 40
Y_BORDER = 40
drawPieces( screen, goblin_list ):
global X_BORDER, Y_BORDER
# paint background white
screen.fill( ( 255,255,255 ) )
# draw each goblin in the list
for single_goblin in goblin_list:
# copy the three parts of the goblin's info from the list
board_x, board_y, bitmap = single_goblin
# convert game grid-position to screen-position
screen_x = X_BORDER + ( board_x * 32 )
screen_y = Y_BORDER + ( board_y * 33 )
screen.blit( bitmap, ( screen_x, screen_y ) )
# flush the updates to the display
pygame.display.flip()
Также есть спрайтов PyGame , которые являются программными объектами, поэтому они инкапсулируют обе переменные дляобъект и функции для работы с ним.
class GoblinSprite( pygame.sprite.Sprite ):
def __init__( self, bitmap, board_position ):
self.position = board_position
self.image = bitmap
self.rect = self.image.get_rect()
self.setScreenPosition()
def setScreenPosition( self ):
global X_BORDER, Y_BORDER
screen_x = X_BORDER + ( self.position[0] * 32 )
screen_y = Y_BORDER + ( self.position[1] * 33 )
self.rect.x = screen_x
self.rect.y = screen_y
return (screen_x, screen_y)
На веб-сайте PyGame есть краткое руководство по спрайту .