Преобразуйте ваши стены лабиринта в структуру данных / класс. Или даже просто сохранить их как список pygame.Rect s. Также поддерживайте Rect вокруг вашего игрока-объекта.
Например:
maze_walls = [ pygame.Rect(0, 1, 500, 1),
pygame.Rect(0, 1, 0, 500),
pygame.Rect(0, 499, 500, 499),
pygame.Rect(500, 0, 500, 500),
pygame.Rect(100, 50, 200, 50) ]
# this needs to have it's position updated when x & y change.
player_rect = pygame.Rect( x-radius, y-radius, 2*radius, 2*radius )
Это позволит коду использовать встроенную функцию pygame.Rect.colliderect () и / или pygame.rect.collidelist () для проверки на наличие столкновений.
Таким образом, это дает цикл рисования для стен:
#Draws character
win.fill((0, 0, 0))
pygame.draw.circle(win, YELLOW, (x, y), radius)
#Draws walls
for wall in maze_walls:
pygame.draw.rect( win, BLUE, wall )
pygame.display.update()
Поэтому, чтобы проверить наличие столкновений между вашим игроком и стенами, обходить стены, проверяя каждую из них, довольно тривиально:
# Did the player hit a wall
player_rect.center = (x, y)
for wall in maze_walls:
if ( player_rect.colliderect( wall ) ):
print( "Player hits wall: "+str( wall ) )
# TODO: stop movement, whatever
Конечно, есть лучшие способы сделать это с PyGame Sprites ,но я постарался максимально приблизить ответ к тому, что делает ваш код, при этом максимально упрощая его.