【发布时间】:2013-08-02 12:00:58
【问题描述】:
我的目标是创建一个名为findList() 的函数,它保存一个点和屏幕表面的给定参数。
我的目标是计算该点的颜色,然后返回填充颜色的列表。
例如,如果屏幕上有一个红色圆圈,并且该点位于红色圆圈内,我希望能够返回一个包含该圆圈所有点的列表。
基本上,该点会扩大,避开所有其他颜色和屏幕边缘,直到它不能进一步扩大;然后函数返回所有创建点的列表。
这是我尝试过的:
def findList(point,screen):
directions=[(0,0)]
myList=[]
myList.append(point)
startColour=screen.get_at(point)
i=0
loop=0
while True:
loop=loop+1
print(loop)
directions=[]
print("Length of myList: "+str(len(myList)))
for i in range(len(myList)):
if myList[i][0]+1<WINDOWWIDTH and screen.get_at((myList[i][0]+1,myList[i [1]))==startColour and myList[i][0]+1 not in myList and myList[i][0]+1 not in directions:
directions.append((myList[i][0]+1,myList[i][1]))
if myList[i][0]-1>0 and screen.get_at((myList[i][0]-1,myList[i][1]))==startColour and myList[i][0]-1 not in myList and myList[i][0]-1 not in directions:
directions.append((myList[i][0]-1,myList[i][1]))
if myList[i][1]+1<WINDOWHEIGHT and screen.get_at((myList[i][0],myList[i][1]+1))==startColour and myList[i][1]+1 not in myList and myList[i][1]+1 not in directions:
directions.append((myList[i][0],myList[i][1]+1))
if myList[i][1]-1>0 and screen.get_at((myList[i][0],myList[i][1]-1))==startColour and myList[i][1]-1 not in myList and myList[i][1]-1 not in directions:
directions.append((myList[i][0],myList[i][1]-1))
print(len(directions))
for i in directions:
myList.append(i)
if len(directions)==0:
break
print("Exited loop.")
return myList
我知道编码风格很糟糕,其中大部分可能没用,但普遍的问题是该功能(可能)工作但非常缓慢,并且似乎添加了很多以前添加的像素,直到我可怜的小上网本不能再处理它正在处理的 100 000 个点。
如果有人可以就更好的功能提出一些建议,那真的会对我的程序有所帮助,因为我只有 13 岁,对这段混乱的代码感到非常困惑(注意 ifs 中的 4 个条件)。
【问题讨论】:
标签: python image colors pygame