| loop within a loop 
 
	 
	
		| Author | Message |   
		| iluvchairs112 
 
 
 
 
 | 
			
				|  Posted: Mon Feb 26, 2007 7:41 pm    Post subject: loop within a loop |  |   
				| 
 |  
				| how does a loop within a loop work? 
 loop % start first loop
 
 redx:=redx+10 %redx increases by 10
 delay(50)
 redy:=redy+10 %redy increases by 10
 delay(50)
 
 if redx=300
 then
 loop
 redx:=redx-10
 delay(50)
 redy:=redy-10
 delay(50)
 end loop
 end if
 
 drawfilloval(redx, redy, redxr, redyr, 40)
 drawfilloval(orangex, orangey, orangexr, orangeyr, 65)
 
 end loop
 
 
 basically what I want to happen is the red circle goes up until it reaches a certain point(when x=300) and then have it go back down again
 it should be simple, but my code just stops it ... it doesn't continue back down
 what am I missing?
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| Sponsor Sponsor
 
  
   |  |   
		|  |   
		| Clayton 
 
  
 
 
 | 
			
				|  Posted: Mon Feb 26, 2007 7:58 pm    Post subject: Re: loop within a loop |  |   
				| 
 |  
				| Well, what does redx start off as? Once it enters that if statement, and that nested loop, it never gets out, because there is no exit condition. |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| BenLi 
 
  
 
 
 | 
			
				|  Posted: Mon Feb 26, 2007 8:05 pm    Post subject: Re: loop within a loop |  |   
				| 
 |  
				| a couple of issues, in order to see it, the drawoval needs to be in the nested loop as well. Even then, you won't see a difference because its going down the way it went up. Perhaps you meant something like this? 
 
 	  | code: |  	  | 
var redx, redy := 0
 loop % start first loop
 
 redx := redx + 10 %redx increases by 10
 delay (50)
 redy := redy + 10 %redy increases by 10
 delay (50)
 
 if redx = 300
 then
 loop
 redx := redx + 10
 delay (50)
 redy := redy - 10
 delay (50)
 drawfilloval (redx, redy, 10, 10, 40)
 end loop
 end if
 
 drawfilloval (redx, redy, 10, 10, 40)
 
 end loop
 
 | 
 
 However, a nested loops is not the best solution for your problem, consider something like this, where the y value increments by a negative or a positive value
 
 	  | code: |  	  | 
 setscreen ("graphics:max,max")
 var redx, redy := 0
 var n := 10
 loop % start first loop
 if redy < 0 then
 n := 10
 elsif redy > 300 then
 n := -10
 end if
 redx := redx + 10
 redy := redy + n
 drawfilloval (redx, redy, 10, 10, 40)
 delay (10)
 end loop
 
 | 
 
 
 Quote: 
Well, what does redx start off as? Once it enters that if statement, and that nested loop, it never gets out, because there is no exit condition.
 
 Good point, however, if he only wants to animate one time, he doesn't need to, however, its bad to have an infinite loop none the less
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		|  |  
 |