Пиксельное движение и петли 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)
Другие вопросы по тегам