| Editing a code, Trying to add a replay y/n option - Need help 
 
	 
	
		| Author | Message |   
		| Aange10 
 
  
 
 
 | 
			
				|  Posted: Sat Sep 03, 2011 2:12 pm    Post subject: Editing a code, Trying to add a replay y/n option - Need help |  |   
				| 
 |  
				| What is it you are trying to achieve? I have just started learning turing, and I have read a lot of the time the best way to learn is to look at other people's code and edit/add to the code. I went to the 20 lines or less weekly contest (I figured very good programers would be there, with short code that I could understand, and little "extra features". Allowing me to add these "extra features") and I found a nice random triangle drawing code, and wanted to add a replay button to it.
 
 
 What is the problem you are having?
 I have successfully (and probably messily) added a way to replay. However I can not find out how to "bug proof" the y/n system.
 
 Describe what you have tried to solve this problem
 I have tried adding another else statement that tells them that what they have entered is an invalid letter, and makes them choose another. My coding (probably messily) works! But the only problem is if they enter an invalid character again, it will just act as if they pressed "y" (except it doesn't clear the screen).
 
 Post any relevant code (You may choose to attach the file instead of posting the code if it is too long)
 The origional code is:
 
 
 	  | Turing: |  	  | 
View.Set ("graphics:max;max")
var d : array 1 . . 8 of real
for  i : 0 . . 3 
    d ( i * 2  + 1) :=  Rand.Int (1 , maxx) 
    d ( i * 2  + 2) :=  Rand.Int (1 , maxy)
end for
for : 0 . . 100000
    var  r :=  Rand.Int (0 , 2) 
    d (7) := ( d (7)  + d ( r * 2  + 1))  / 2 
    d (8) := ( d (8)  + d ( r * 2  + 2))  / 2
    Draw.Dot (floor ( d (7)), floor ( d (8)), black)
end for | 
 
 The code now (after my adding) looks like this:
 
 
 	  | Turing: |  	  | 
View.Set ("graphics:max;max")
loop
var d : array 1 . . 8 of real
var  text : string
for  i : 0 . . 3 
    d ( i * 2  + 1) :=  Rand.Int (1 , maxx) 
    d ( i * 2  + 2) :=  Rand.Int (1 , maxy)
end for
for : 0 . . 100000
    var  r :=  Rand.Int (0 , 2) 
    d (7) := ( d (7)  + d ( r * 2  + 1))  / 2 
    d (8) := ( d (8)  + d ( r * 2  + 2))  / 2
    Draw.Dot (floor ( d (7)), floor ( d (8)), black)
end for
put "Would you like to coninue? y/n "  ..
%Asks them if they'd like to continue
get  text
%Gets answer
if  text = "y" then
cls
% If y, it clears the screen, and the loop draws another triangle (sketchy on whats happening, but it works - I think it ends the if statement and the loop keeps going)
elsif  text = "n" then
% If n, then it says good bye, waits 5 seconds, clears the screen and says Program closing.. then stops the program 2 seconds later.
put "Good bye!"
delay (5000)
cls
put "Program closing..."
delay (2000)
exit
else put "That is not a valid action."
% If anything else if put it tell them that it is not a valid action
delay (2000)
put "Would you like to continue? y/n "  ..
% After letting them know the action isn't valid, it repeats the original question
get  text
    if  text = "n" then
    put "As you wish..."
    delay (2000)
    cls
    put "Program closing."
    delay (2000)
% If n was put, then it says As you wish... waits 2 seconds, says Program closing, waits 2 seconds and then closes
    exit
    elsif  text = "y" then
% If y was put, then it clears the screen, and another triangle is drawn
    cls
end if
end if
end loop
% I know you guys probably know the coding, and my comments are unnecessary, but I'm also using these comments
% to show you my thought process. I coded the replay system by myself and have been reading up on turing for only about 2 days now. | 
 
 Please specify what version of Turing you are using
 4.1.1
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| Sponsor Sponsor
 
  
   |  |   
		|  |   
		| Insectoid 
 
  
 
 
 | 
			
				|  Posted: Sat Sep 03, 2011 2:20 pm    Post subject: RE:Editing a code, Trying to add a replay y/n option - Need help |  |   
				| 
 |  
				| You're going in the right direction. 
 In order to 'bug proof' your system, you can put the prompt into another loop.
 
 
 	  | code: |  	  | 
loop
 get text
 exit when text = "y" || text = "n"
 put "That is not a valid action." %if y or n is entered, this will not be displayed because the loop will have exited
 end loop
 if text = "n" then break %No need to check for y, 'cause if y is entered you do nothing. Just continue the loop.
 
 | 
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| Aange10 
 
  
 
 
 | 
			
				|  Posted: Sat Sep 03, 2011 2:29 pm    Post subject: RE:Editing a code, Trying to add a replay y/n option - Need help |  |   
				| 
 |  
				| Thankyou, insectoid! However, y does clear the screen and then repeat the loop. (So the triangles won't be drawn over each other) 
 So would
 
 
 	  | code: |  	  | 
loop
 get text
 if text = "y" or text = "n"
 cls
 exit
 end if
 end loop
 if text = "n" then break
 end if
 
 | 
 work?
 
 EDIT: This code works, thank you a ton for assisting me!
 
 	  | code: |  	  | 
View.Set ("graphics:max;max")
 loop
 var d : array 1 .. 8 of real
 var text : string
 
 for i : 0 .. 3
 d (i * 2 + 1) := Rand.Int (1, maxx)
 d (i * 2 + 2) := Rand.Int (1, maxy)
 end for
 
 for : 0 .. 100000
 var r := Rand.Int (0, 2)
 d (7) := (d (7) + d (r * 2 + 1)) / 2
 d (8) := (d (8) + d (r * 2 + 2)) / 2
 Draw.Dot (floor (d (7)), floor (d (8)), black)
 end for
 loop
 put "Would you like to continue? y/n: " ..
 get text
 if text = "y" or text = "n" then
 cls
 exit
 else put "That is invalid. Please try again"
 delay (1000)
 cls
 end if
 end loop
 if text = "n" then
 put "Good Bye!"
 delay (5000)
 cls
 put "Program Closing!"
 delay (2000)
 break
 end if
 end loop
 
 | 
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		| Insectoid 
 
  
 
 
 | 
			
				|  Posted: Sat Sep 03, 2011 2:58 pm    Post subject: RE:Editing a code, Trying to add a replay y/n option - Need help |  |   
				| 
 |  
				| Better to cls at the top of the main loop. It will perform the same, but it's good coding practice. 
 The program flow should look like this:
 
 
 	  | code: |  	  | 
%declare all variables
 loop %main loop
 %initialize all necessary variables
 cls %cls before drawing anything, to automatically clear when you 'replay'.
 
 %main program goes here
 
 loop %and ofc the exit loop
 put "Would you like to continue? y/n: " ..
 get text
 exit when text = "y" || text = "n"
 put "That is not a valid action."
 end loop
 if text = "n" then break
 end loop
 
 | 
 
 It's important that your code is organized.
 |  
				|  |  |   
		|  |  |  
	  
		|  |   
		|  |  
 |