我正在尝试使用泛洪填充递归算法填充多边形中的颜色。我在python 2.7编码。我走向填充中途然后崩溃。它一直在我运行代码时发生。代码有什么问题,或者只是我的笔记本电脑中的问题。请帮忙?谢谢。这是代码。
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()
答案 0 :(得分:1)
非常确定您的递归限制是个问题。所有setrecursionlimit确实删除了会阻止你做蠢事的警告;它不会神奇地在CPU中创建晶体管来保存1500000000调用堆栈。
在堆栈上实施洪水填充通常是个坏主意。改为在while循环中使用堆栈数据结构。
答案 1 :(得分:0)
你应该提供你正在获得的错误,但根据代码,我认为错误是IndexError
,你应该检查像素坐标是否是有效坐标,即它们总是位于在你的情况下表面是screen
。
根据documentation:If the pixel position is outside the area of the Surface an IndexError exception will be raised.
请确保get_at
方法获取有效参数或用try\except
块包围它。