### Karel J Robot ch 7-8

```Karel J Robot
Chapter 7 and 8
Recursion
Recursion – where the function being
defined is applied within it’s own
definition
 Ex)(p185)
 public void findBeeper()
 { if(!nextToABeeper)
 { move();

findBeeper();
 }}

Recursion









Recursive functions do not use loops!
Fun Practice:
What is a factorial?
Create the following method:
public static int factorial(int x)
Hints: what does a factorial do?
Takes the number… multiply’s it by the next
smallest integer
Stops at 1
Your method should evaluate whether or
not you’ve reached 1
Solution

public static int factorial(int x)
{
if(x<=1)
{
return 1;
}
return x*factorial(x-1);
}
challenge
Create the following method:
 int sumOfDigits(int x)
 If x is 39, sumOfDigits should return 12
 Hints: base case is a number from 0-9
 For the recursive call, consider how x/10
or x%10 will help
 % - modulus – returns the remainder
 / - division – doesn’t round: 9/2 = 4

Homework

In the main, we have typically seen the following:
 MileMover karel = new MileMover(1,1,East,0);
 karel.move();
 Having a robot set up his own thread, we can do
the following:
 MileMover karel = new MileMover(1,1,East, 0);
 He will do the same thing as above without calling
any methods if we have it set up its own thread!

Implement the Runnable class //this is a java class
 In constructor:
 World.setupThread(this) //this tells the robot to
run itself
 NEED: public void run()
 Inside of the run method will be the code that
will automatically runj
 Lastly – in the main, we need:
 World.setTrace(false);
World.showSpeedControl(true)
 Click resume!

Modify the path finding robot from ch 6
pr set so that in the main, you only have
the following:
 new ch6pr14(2,2,East,0)
 //you don’t even have to give the robot a
name!

issues
 Homework
 Read chapter 8 – program the racers on
212 and the philosophers on 214

Problem set
Ch 7, #1(Solve just #16 recursively), 18
 Ch 8, #1 (requires editing steeplechase
program)
 PACMAN

pacman

Our final karel experience:
◦ 1st – set up the robot world to mimic a
pacman world (karel images replaces with
pacman, etc.)
◦ 2nd – create an abstract class called ghost
◦ Look up the 4 different types of ghosts…. And
program their behaviors into different types
of classes!
Pacman
 3rd
– the pacman class
◦ We need to be able to control him
◦ Eventually we will work with keylisteners for
seemless play, but for now we’ll do an easier
solution
- We need a ‘commandPacman()’ method
- Creates a local variable:
- Scanner kbd = new Scanner(System.in);
Pacman
commandPacman() continued…
Need a variable to hold keyboard input:
char move = kb.next().charAt(0);
Need a switch statement so 4 different keys control
movements:
 switch(move)
 { case ‘w’:




karel.faceNorth();
karel.move();
break;
case ‘s’:
karel.faceSouth(); //… you can figure the rest!
 Use a while loop so that move == ‘q’ makes karel turnOff
Project






Work in pairs! (we will try and mimic
teamwork)
1 person can work on pacman while the
other on ghosts
10 points – working pacman class
10 points – working ghost classes (i.e. shut
off pacman when they touch)
2 points – accurate world
3 points – bonus for best version (class will
vote)
```