Пиксельное движение и петли Python
Мы используем JES в моем вводном классе программирования, и я столкнулся с препятствиями для своей лаборатории. Предполагается, что программа позволяет пользователю выбрать изображение, а затем в центре изображения запускается мотылек (жук), который делает случайные движения и меняет пиксели на белый, если они еще не имитируют прием пищи. Я застрял на части движения. текущая программа ниже загрузит и съест 1 пиксель в самом центре, но не будет делать никаких других движений. Может ли кто-нибудь дать мне подсказку о том, что я делаю неправильно с моими случайными вызовами движения?
from random import *
def main():
#lets the user pic a file for the bug to eat
file= pickAFile()
pic= makePicture(file)
show(pic)
#gets the height and width of the picture selected
picHeight= getHeight(pic)
picWidth= getWidth(pic)
printNow("The height is: " + str(picHeight))
printNow("The width is: " + str(picWidth))
#sets the bug to the center of the picture
x= picHeight/2
y= picWidth/2
bug= getPixelAt(pic,x,y)
printNow(x)
printNow(y)
color= getColor(bug)
r= getRed(bug)
g= getGreen(bug)
b= getBlue(bug)
pixelsEaten= 0
hungerLevel= 0
while hungerLevel < 400 :
if r == 255 and g == 255 and b == 255:
hungerLevel + 1
randx= randrange(-1,2)
randy= randrange(-1,2)
x= x + randx
y= y + randy
repaint(pic)
else:
setColor(bug, white)
pixelsEaten += 1
randx= randrange(-1,2)
randy= randrange(-1,2)
x= x + randx
y= y + randy
repaint(pic)
1 ответ
Похоже, вы никогда не обновляете позицию ошибки в цикле. Вы меняете x
а также y
, но это не имеет никакого влияния на bug
,
Пытаться:
while hungerLevel < 400 :
bug= getPixelAt(pic,x,y)
#rest of code goes here
Кстати, если у вас есть идентичный код в if
блок и else
блок, вы можете упростить вещи, перемещая дубликаты за пределами блоков полностью. Пример:
while hungerLevel < 400 :
bug= getPixelAt(pic,x,y)
if r == 255 and g == 255 and b == 255:
hungerLevel + 1
else:
setColor(bug, white)
pixelsEaten += 1
randx= randrange(-1,2)
randy= randrange(-1,2)
x= x + randx
y= y + randy
repaint(pic)