Karel J Robot Selected Advanced Topics 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 Read chapter 7 Thread creation 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! Thread creation Implement the Runnable class //this is a java class that sets up threads 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! Thread creation 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! 2 different threads Concurrent threads sometimes pose 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)