2017-10-21 85 views
0

J'écris un petit programme qui est destiné à dessiner une ligne de 25 pixels où le randrange lui donnera ses points. J'ai également 4 boîtes rouges qui agissent comme des bombes ou des mines. Lorsque le x, y de la ligne est rouge avec la fonction getColor, la var 'color' sera == en rouge. Arrêtant ainsi la boucle while, ce qui empêchera la ligne de continuer. C'est également la même fonction désirée pour les points bleus que j'ai dessinés sur le terrain de jeu. J'ai trouvé que mon programme ne fonctionnait pas de cette manière malheureusement. Toutes les suggestions sur comment je pourrais résoudre ceci?Alors que la boucle ne s'arrête pas correctement comme il se doit

from random import * 
def main(): 
    #draw 
    pic = makeEmptyPicture(600, 600, white) 
    show(pic) 

    #for the 4 boxes 
    boxCount = 0 
    #while statement to draw 
    while boxCount < 4: 
     addRectFilled(pic, randrange(0,576), randrange(0,576), 25, 25, red) 
     addArcFilled(pic, randrange(0,576), randrange(0,576), 10, 10, 0, 360, blue) 
     boxCount = boxCount + 1 
    repaint(pic) 

    #vars for while statement 
    newX = 0 
    newY = 0 
    oldX = 0 
    oldY = 0 
    robotcount = 0 
    finished = 0 
    safe = 0 
    triggered = 0 
    #while loop, stops @ step 750, or when a px == red/blue 
    while robotcount < 750 or color == red or color == blue: 

     oldX = newX 
     oldY = newY 
     #how to generate a new line poing +25/-25 
     newX = newX + randrange(-25, 26) 
     newY = newY + randrange(-25, 26) 
     #if statements to ensure no x or y goes over 599 or under 0 
     if newX > 599 or newX < 0: 
      newX = 0 
     if newY > 599 or newY < 0: 
      newY = 0 
     #functions to get pixel color of x,y 
     px = getPixel(pic, newX, newY) 
     color = getColor(px) 
     #draw the line from old to new, and also add +1 count for robot's steps 
     addLine(pic, oldX, oldY, newX, newY, black) 
     robotcount = robotcount + 1 

    #if statement to determine why the while loop stops 
    if color == red: 
     triggered = 1 
     printNow("trig") 
    if color == blue: 
     safe = 1 
     printNow("safe") 
    if robotcount == 750: 
     finished = 1 
     printNow("Fin") 
+0

Comment '' red' et blue' définis? – Iguananaut

+1

Avez-vous essayé de résoudre vous-même ce problème? Je parie un peu de temps avec un débogage de printf. https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – jdv

+0

@Iguananaut plus comme où 'color' est défini ... –

Répondre

0

Vous souhaitez atteindre cet objectif:

#while loop, stops @ step 750, or when a px == red/blue 

Cela ne fonctionne pas:

while robotcount < 750 or color == red or color == blue: 

Il serait plus simple d'utiliser une place boucle for:

for robotcount in range(750): 
    if color == red or color == blue: 
     break 

Vous pouvez également utiliser unboucleet fixer vos conditions (notez le !=):

while robotcount < 750 or color != red or color != blue: 
+0

Lorsque la ligne est dessinée à travers une boîte rouge, elle ne s'arrêtera pas et affichera une chaîne différente selon la dernière instruction if. – ohGosh

+0

Nécessaire également de n'utiliser qu'une instruction while, n'utilisant pas encore de boucles. – ohGosh

+0

Ajoutez une alternative avec 'while'. –