Я пытаюсь заполнить цвет в многоугольнике, используя рекурсивный алгоритм наводнения. Я кодирую в python 2.7. Я иду на полпути к заполнению, затем падает. Это происходит все время, когда я запускаю код. Есть ли что-то неправильно с кодом, или это просто проблема в моем ноутбуке. Пожалуйста помоги? Спасибо. Вот код.алгоритм заполнения наводнений в python
import pygame
import numpy as np
from pygame.locals import *
import sys
def flood_fill(name, x, y, color):
get = name.get_at((x, y))
if get == (0, 0, 0, 255):
screen.set_at((x, y), red)
pygame.display.flip()
flood_fill(name, x + 1, y, color)
flood_fill(name, x - 1, y, color)
flood_fill(name, x, y + 1, color)
flood_fill(name, x, y - 1, color)
if __name__ == '__main__':
pygame.init()
sys.setrecursionlimit(1500000000)
width = 640
height = 480
resolution = (width, height)
screen = pygame.display.set_mode(resolution)
black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
pygame.draw.rect(screen, white, [20, 20, 250, 100], 2)
flood_fill(screen, 100, 50, red)
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.flip()
Какое сообщение об ошибке при сбое? – Miquel
Я не знаком с 'pygame', но я предполагаю, что у вас есть незаконные индексы в' name.get_at ((x, y)) '. Проверьте координаты или поймайте рассматриваемое исключение с помощью 'pass' (что, вероятно, не является хорошим стилем). –
@MOehm Я думал то же самое, но я думаю, что его функция не должна когда-либо попадать в незаконные параметры, потому что его переданные параметры гарантируют, что наводнение завершится до краев экрана (если правильно написано с курса). Думайте, проблема в другом месте. –