230 likes | 572 Views
Stepwise Refinement -- A procedure calls another procedure. A curupira is playing soccer in the rainforest. The curupira has a soccer ball and will kick the soccer ball toward a pond in the forest. Each kick causes the soccer ball to move forward a random distance .
E N D
Stepwise Refinement -- A procedure calls another procedure
A curupira is playing soccer in the rainforest. The curupira has a soccer ball and will kick the soccer ball toward a pond in the forest. Each kick causes the soccer ball to move forward a random distance. • If the curupira gets the soccer ball in the water, the curupiradoes a dance, otherwise he disappears, shocked that he didn’t succeed.
Problem solving step 1 Download and open the world: CurupiraSoccerSetup.a3p
Problem Solving step 2 Design an algorithm • Do in order • curupira runs to soccer ball • curupira kicks the soccer ball a random distance • If soccer ball is in the water, • curupira dances • else • curupira disappears
Implementation translate algorithm into code, one line at a time Problem Solving step 3 Do in order curupira runs to the soccer ball curupira kicks the soccer ball a random distance …
Decomposition Recall Decomposition -- take a complex procedure and break into smaller, simpler actions Do in order curupira runs to the soccer ball curupira kicks the soccer ball a random distance … runToObject Do together curupira performs running motion curupira moves forward to the ball
Problem There is no running motion procedure for the curupira • runToObject • Do together • curupira performs a running motion • curupira moves forward distance to the <target>
Stepwise refinement: create another procedure & call it from this procedure Stepwise refinement myFirstMethod Do in order curupira runs to the soccer ball curupira kicks the soccer ball a random distance … runToObject Do together curupira performs running motion curupira moves forward to the ball runningMotion
runningMotion Algorithm • Do in order • Do together • curupira right leg turns forward • curupira left leg turns backward • Do together • curupira right leg turns backward • curupira left leg turns forward • Do together • curupira right leg turns forward • curupira left leg turns backward
Video: 14. Create a procedure This video illustrates the steps documented in slides 11 -12.
Select Curupirafrom the class menu in the code editor Open Curupira class document
Select Add Procedure… and name it runningMotion Declare a new procedure
By default, actions are for this (entire) curupira Translating algorithm to code • Do in order • Do together • curupira right leg turns forward • curupira left leg turns backward • Do together • curupira right leg turns backward • curupira left leg turns forward • Do together • curupira right leg turns forward • curupira left leg turns backward
This video illustrates slide 16 Video: 15. Selecting subpart joints
Click on the instance menu Select an appropriate joint for the subpart In this example, select the hip because the leg subpart turns at the hip Select a joint in the skeleton
Now add the code Remember the Do Together! Complete procedure
Working our way back up… myFirstMethod Do in order curupira runs to the soccer ball curupira kicks the soccer ball a random distance … runToObject Do together curupira performs running motion curupira moves forward distance to the <target> CreaterunToObjectprocedure and add call to runningMotion runningMotion Do together curupira right leg turns forward curupira left leg turns backward … We have completed runningMotionprocedure
Click on Curupira tab Click on Add Procedure… Name itrunToObject Implement runToObject 1 Class panel 2 3
Add comment Call runningMotion
Return to myFirstMethod in the Scene class Test runToObject
Test – call from myFirstMethod myFirstMethod Do in order curupira runs to the soccer ball curupira kicks the soccer ball a random distance … Testing: Call runToObjectfrom myFirstMethod runToObject Do together curupira performs running motion curupira moves forward distance to the <target> runningMotion Do together curupira right leg turns forward curupira left leg turns backward …
Call runToObject in myFirstMethod After we have defined the new procedure, runToObject… 3. 1. 2. • … we need to call it somewhere in our program • Select curupira in the instance menu • Drag the runToObject tile into myFirstMethod in the editor • Click on Run