Aquarium Lab Series Developed by Alyce Brady of
Aquarium Lab Series Developed by Alyce Brady of Kalamazoo College
Why Use This? • Review of concepts – Declaring object variables, creating objects using constructors, invoking methods – Conditional Execution (ifs) – Iteration (for loops) – One-dimensional Arrays – Encapulating behavior (classes) • Intro to Marine Biology Case Study
Getting Started • Instructions are at: – http: //max. cs. kzoo. edu/patterns/Java. Pattern. Labs/Aqu arium. Lab. Series/ • Download the zip file and unzip it – Aquarium. Lab. Series. zip • Add full path to jpt. jar to the classpath – This holds the user interface classes • Compile all source – Don’t forget the files in the Black. Box. Classes directory
First View of the Aquarium • http: //max. cs. kzoo. edu/patterns/Java. Patter n. Labs/Aquarium. Lab. Series/Obj. Const. Labs. shtml#start • Run the main in Aqua. Sim. Application – Click on the Start button – You will see the initial empty aquarium – Click the top right X to close the window
First View of the Aquarium
Add 3 Fish • http: //max. cs. kzoo. edu/patterns/Java. Patter n. Labs/Aquarium. Lab. Series/Obj. Const. Labs. shtml#construct • Edit the main in Aqua. Sim. Application. java – Create 3 Aqua. Fish objects • After the start button is pushed • Before the user interface is asked to show the aquarium – Still no fish!
Add 3 Fish
Show the 3 Fish • http: //max. cs. kzoo. edu/patterns/Java. Patter n. Labs/Aquarium. Lab. Series/Obj. Const. Labs. shtml#invoke • Edit the main in Aqua. Sim. Application. java – Check the documentation on Aqua. Sim. GUI for how to draw fish (cause them to show up) – Add calls to this method for each of the 3 fish in the main • After you create the fish and draw the aquarium • Before you repaint to show the result
Show The 3 Fish
Make the Fish Move • http: //max. cs. kzoo. edu/patterns/Java. Pattern. Lab s/Aquarium. Lab. Series/Obj. Const. Labs. shtml#invo ke • Check the Aqua. Fish documentation to find the method to move the fish – Add calls to this method for each of the 3 fish in the main after you have displayed them • After the last code you added to the main to draw the fish – Add the code to draw the aquarium and fish again and repaint to show the changes
Possible Problems • If you forget to redraw the aquarium – you will see both locations of the fish • If you don’t show the fish again – You won’t see them move • If you don’t repaint after showing the fish again – You won’t see them move • They display and move so fast – You won’t see them move
Pause Between Movements • http: //max. cs. kzoo. edu/patterns/Java. Patter n. Labs/Aquarium. Lab. Series/Obj. Const. Labs. shtml#invoke • Check the documentation for the Aqua. Sim. GUI class – To see how to pause • Add a call to this method – Before you move the fish
Reverse at Wall • http: //max. cs. kzoo. edu/patterns/Java. Pattern. Lab s/Aquarium. Lab. Series/Conditional. Labs. shtml#if • Fish get stuck when they hit the wall – Find a method in Aqua. Fish that returns true when the fish is at the wall – Find the method that reverses the fish • Add code in the main to test if the fish is at the wall and if so reverse it – After you ask the fish to move
Reverse at Wall
Red or Blue Fish • http: //max. cs. kzoo. edu/patterns/Java. Pattern. Labs/Aquari um. Lab. Series/Conditional. Labs. shtml#else • Check the documentation for Rand. Num. Generator for how to get an object of the class Random – Put this before you create the fish in the main • Declare a variable to hold the fish color – Color fish. Color; • Find how to get 0 or 1 from Random – If 0 set the fish color to Color. RED – Else set the fish color to Color. BLUE • Specify the color when you create the fish
Red or Blue Fish
Rainbow of Colors • http: //max. cs. kzoo. edu/patterns/Java. Pattern. Lab s/Aquarium. Lab. Series/Conditional. Labs. shtml#els eif • Change random. next. Int(int max. Val) to 6 to give you a number from 0 to 5 • Use if, and else if to assign the color – – – 0 = Color. RED 1 = Color. ORANGE 2 = Color. YELLOW 3 = Color. GREEN 4 = Color. BLUE 5 = Color. MAGENTA
A Better Way • Fish color shouldn’t be assigned in the main – They should be assigned in the constructor that doesn’t take a color – But, this means changing the first line which currently calls the other constructor – Instead pull out the code in the other constructor and put it in an initialize
Rainbow of Colors
Loop 10 Times • http: //max. cs. kzoo. edu/patterns/Java. Pattern. Lab s/Aquarium. Lab. Series/Repetition. Labs. shtml#for • Instead of moving forward just once move forward 10 times – – Pause to see the previous position Move the fish Draw the aquarium and fish Be sure to repaint the user interface to see the changes • Either start at 0 and loop while < 10 or start at 1 and loop while <= 10
User Specified Number of Steps • http: //max. cs. kzoo. edu/patterns/Java. Patter n. Labs/Aquarium. Lab. Series/Repetition. Labs. shtml#input • You can use the user. Interface to ask the user for how many steps to use – Change the constructor parameters – Find the method that return the number of steps – Change your loop to use this number
User Specified Number of Steps
Add ¼ Chance of Reversing • http: //max. cs. kzoo. edu/patterns/Java. Patter n. Labs/Aquarium. Lab. Series/Repetition. Labs. shtml#or • When a fish moves – Still reverse if at the wall – But also reverse if a random value from 0 to 3 is 0 (1/4 chance of reversing) – Do this in one if statement boolean expression (using ‘or’)
Add ¼ Chance of Reversing
Add an Array of Fish • http: //max. cs. kzoo. edu/patterns/Java. Patter n. Labs/Aquarium. Lab. Series/More. Fish. shtml #LIDS • Change the constructor call for Aqua. Sim. GUI to ask the user how many fish to use • Ask the user interface how many to use • Create an array of Aqua. Fish of that size
Add an Array of Fish
Create First and Last Fish • http: //max. cs. kzoo. edu/patterns/Java. Patter n. Labs/Aquarium. Lab. Series/More. Fish. shtml #Access. Fish • Create a fish at the first position in the array and at the last and show both as well as the aquarium
Create First and Last Fish
Looping Through an Array • http: //max. cs. kzoo. edu/patterns/Java. Patter n. Labs/Aquarium. Lab. Series/More. Fish. shtml #Process. All • Use a for loop to create all the fish in the array • Use another for loop to show them all
Looping Through an Array
Moving the Fish Again • http: //max. cs. kzoo. edu/patterns/Java. Patter n. Labs/Aquarium. Lab. Series/More. Fish. shtml #School%20 in%20 Motion • Add another loop to move each of the fish – You will need a nested loop • Be sure to use a different index variable – Don’t forget to show the fish again
Moving the Fish Again
Up and Down Fish • http: //max. cs. kzoo. edu/patterns/Java. Pattern. Labs/Aquari um. Lab. Series/Implementing. Classes. shtml • Add ascend and descend methods to Aqua. Fish (by height) • In the main before the fish moves do: – A fish at the surface has a 2/3 chance of descending and a 1/3 chance of staying at the surface. – A fish at the bottom has a 1/3 chance of ascending and a 2/3 chance of staying at the bottom. – A fish that is neither at the surface nor at the bottom has a 1/3 chance of ascending, a 1/3 chance of descending, and a 1/3 chance of staying at the same depth.
Up and Down Fish
Aqua. Fish Move Method • http: //max. cs. kzoo. edu/patterns/Java. Pattern. Lab s/Aquarium. Lab. Series/Implementing. Classes. sht ml • The main should only create objects and start them doing something – it shouldn’t have behavior in it! – Create a new move method in Aqua. Fish and move all code related to moving the fish there – Change the main to call the new move method – Test to make sure you get the same behavior
Aqua. Fish Move Method
Adding a Simulation Object • http: //max. cs. kzoo. edu/patterns/Java. Pattern. Lab s/Aquarium. Lab. Series/Implementing. Classes. sht ml • Finish the Simulation class – Finish the constructor – Finish the run method – Finish the step method • In the main method – Create a simulation object • Tell it to run the user specified number of steps • Test to see if you get the same results
- Slides: 37