Как проверить, сталкивается ли змея с границей?Python

Программы на Python
Anonymous
Как проверить, сталкивается ли змея с границей?

Сообщение Anonymous »


Я делаю игру-змейку в pygame и не могу понять, как выполнить проверку столкновений на границе игры. Я хотел бы реализовать проверку столкновений с границей, чтобы я мог закончить игру, когда змея достигнет границы. Мне интересно, как лучше всего это сделать. Вот мой код, если это поможет.

импортировать pygame импортировать систему импортировать случайный pygame.init() win_width, win_height = 900, 1000 game_width, game_height = 800, 800 GRID_SIZE = 40 ВВЕРХ = (0, -1) ВНИЗ = (0, 1) ВЛЕВО = (-1, 0) ВПРАВО = (1, 0) win = pygame.display.set_mode((win_width, win_height), pygame.RESIZABLE) класс Змея: защита __init__(сам): собственная длина = 1 self.positions = [(game_width // 2 + 50, game_height // 2 + 50)] self.direction = random.choice([ВВЕРХ, ВНИЗ, ВЛЕВО, ВПРАВО]) self.color = (0, 255, 0) защита get_head_position(self): вернуть self.positions[0] обновление защиты (сам): голова = self.get_head_position() x, y = собственное направление новый = (((head[0] + (x * GRID_SIZE)) % game_width), (head[1] + (y * GRID_SIZE)) % game_height) если len(self.positions) > 2 и новое в self.positions[2:]: self.reset() еще: self.positions.insert(0, новый) если len(self.positions) > self.length: self.positions.pop() сброс защиты (сам): собственная длина = 1 self.positions = [(game_width, game_height)] self.direction = random.choice([ВВЕРХ, ВНИЗ, ВЛЕВО, ВПРАВО]) game_over_sound = pygame.mixer.Sound("Активы/Звуки/game_over.ogg") game_over_sound.play() def render(сам, поверхность): для p в самостоятельных позициях: змея_rect = pygame.draw.rect(поверхность, self.color, (p[0], p[1], GRID_SIZE, GRID_SIZE)) Snake_up = pygame.image.load("Активы/Изображения/snake_up.png") Snake_down = pygame.image.load("Активы/Изображения/snake_down.png") Snake_left = pygame.image.load("Активы/Изображения/snake_left.png") Snake_right = pygame.image.load("Активы/Изображения/snake_right.png") если self.direction == ВВЕРХ: поверхность.blit(snake_up, Snake_rect) если self.direction == ВНИЗ: поверхность.blit(snake_down, Snake_rect) если self.direction == ВЛЕВО: поверхность.blit(snake_left, Snake_rect) если само.направление == ВПРАВО: поверхность.blit(snake_right, Snake_rect) класс Еда: проходить защита основной(): часы = pygame.time.Clock() кадры в секунду = 10 bg = pygame.image.load("Активы/Изображения/background.png") змея = Змея() пока правда: для события в pygame.event.get(): если event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: если event.key == pygame.K_UP, а не Snake.direction == DOWN: змея.направление = ВВЕРХ elif event.key == pygame.K_DOWN, а не Snake.direction == UP: змея.направление = ВНИЗ elif event.key == pygame.K_LEFT, а не Snake.direction == RIGHT: змея.направление = ВЛЕВО elif event.key == pygame.K_RIGHT, а не Snake.direction == ВЛЕВО: змея.направление = ВПРАВО elif event.key == pygame.K_ESCAPE: pygame.quit() win.fill((255, 210, 190)) win.blit(бг, (50, 50)) pygame.draw.rect(win, (100, 100, 100), (30, 30, 840, 840), ширина = 20) змея.обновление() змея.render(победа) pygame.display.update() часы.тик(кадров в секунду) если __name__ == "__main__": основной() Я уже пробовал «pygame.Rect.colliderect(Rect)», но не смог заставить его работать

Вернуться в «Python»