Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-x: Critters reading: HW9 Spec.

Slides:



Advertisements
Similar presentations
Java Control Statements
Advertisements

Loops –Do while Do While Reading for this Lecture, L&L, 5.7.
Interfaces CSC 171 FALL 2004 LECTURE 14. Project 1 review public class Rational { private int numerator, denominator; public Rational(int numerator, int.
CS 112 Introduction to Programming Critters/Event-Driven Programming; Interface Yang (Richard) Yang Computer Science Department Yale University 308A Watson,
CS 112 Introduction to Programming
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-2: Static Data; More Inheritance reading:
Copyright 2006 by Pearson Education 1 Building Java Programs Chapter 5: Program Logic and Indefinite Loops.
Classes, methods, and conditional statements We’re past the basics. These are the roots.
More sophisticated behavior Using library classes to implement some more advanced functionality 4.0.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Java Software Solutions Foundations of Program Design Sixth Edition by Lewis.
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Critters; Subtype Polymorphism Reading: HW9 Handout, Chapter 9.2.
Copyright 2010 by Pearson Education 1 Assignment 11: Critters reading: HW11 assignment spec.
Copyright 2010 by Pearson Education 1 Assignment 11: Critters.
Chapter 5 Conditionals and Loops. © 2004 Pearson Addison-Wesley. All rights reserved2/33 Conditionals and Loops Now we will examine programming statements.
Games and Simulations O-O Programming in Java The Walker School
Week 4-5 Java Programming. Loops What is a loop? Loop is code that repeats itself a certain number of times There are two types of loops: For loop Used.
Writing Methods Using if, loops, and variables to implement algorithms Copyright © 2012 Pearson Education, Inc.
Copyright 2010 by Pearson Education Building Java Programs Chapter 8 Lecture 8-4: Static Methods and Fields.
Copyright 2006 by Pearson Education 1 Building Java Programs Chapter 5: Program Logic and Indefinite Loops.
1 ball, 2 ball, red ball, blue ball By Melissa Dalis Professor Susan Rodger Duke University June 2011.
Copyright 2010 by Pearson Education Homework 9: Critters (cont.) reading: HW9 spec.
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-2: Static Data; More Inheritance reading:
1 CS 177 Week 11 Recitation Slides Class Design/Custom Classes.
ITEC 109 Lecture 11 While loops. while loops Review Choices –1 st –2 nd to ?th –Last What happens if you only use ifs? Can you have just an else by itself?
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-2: Interacting with the Superclass ( super ) reading:
Building Java Programs Chapter 8 Lecture 8-3: Object state; Homework 8 (Critters) reading:
CS2102: Lecture on Abstract Classes and Inheritance Kathi Fisler.
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-2: Interacting with the Superclass ( super ); Discussion of Homework 9:
Copyright 2010 by Pearson Education Building Java Programs Homework 8: Critters reading: Critters Assignment Spec.
Copyright 2010 by Pearson Education Homework 8: Critters reading: HW8 spec.
Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-2: Interacting with the Superclass ( super ); Discussion of Homework 9:
Copyright 2010 by Pearson Education Homework 9: Critters (cont.) reading: HW9 spec.
IST 210: PHP LOGIC IST 210: Organization of Data IST210 1.
Copyright 2009 by Pearson Education Building Java Programs Chapter 8: Classes Lecture 8-3: More Critters, static.
Adding and Eating Worms Mrs. C. Furman August 23, 2010.
Copyright 2009 by Pearson Education Building Java Programs Chapter 9: Inheritance and Interfaces Lecture 9-1.
CS 112 Introduction to Programming Method Overriding; Object Hierarchy; Event-Driven Programming Yang (Richard) Yang Computer Science Department Yale University.
CS 112 Introduction to Programming Critters, Polymorphism Yang (Richard) Yang Computer Science Department Yale University 208A Watson, Phone:
Adapted from slides by Marty Stepp and Stuart Reges
Adapted from slides by Marty Stepp and Stuart Reges
Building Java Programs
Weds, Nov. 26th Reading: Section Handout
Homework 8: Critters reading: HW8 spec.
Building Java Programs
The software crisis software engineering: The practice of developing, designing, documenting, testing large computer programs. Large-scale projects face.
Adapted from slides by Marty Stepp and Stuart Reges
Building Java Programs
Chapter 3 Inheritance © 2006 Pearson Education Inc., Upper Saddle River, NJ. All rights reserved.
HW11 Assignment Specification
CS2102: Lecture on Abstract Classes and Inheritance
Building Java Programs
Lecture 8-3: Encapsulation, this
Critter exercise: Snake
Homework 8: Critters (cont.)
CSE 142 Critters (IPL) behavior: Ant Bird Hippo Vulture
Building Java Programs
Adapted from slides by Marty Stepp and Stuart Reges
Building Java Programs
The software crisis software engineering: The practice of developing, designing, documenting, testing large computer programs. Large-scale projects face.
Building Java Programs
Building Java Programs
Building Java Programs
Building Java Programs
Homework 8: Critters (cont.)
Building Java Programs
Building Java Programs
Homework 9: Critters (cont.)
Building Java Programs
Building Java Programs
Building Java Programs
Presentation transcript:

Copyright 2008 by Pearson Education Building Java Programs Chapter 9 Lecture 9-x: Critters reading: HW9 Spec

Copyright 2008 by Pearson Education 2 Critters A simulation world with animal objects with behavior: getMove movement eat eating food fight animal fighting toString letter to display getColor color to display You must implement: Bear Lion Tiger Husky (creative)

Copyright 2008 by Pearson Education 3 A Critter subclass public class name extends Critter {... } extends Critter tells the simulator your class is a critter an example of inheritance Write some/all 5 methods to give your animals behavior.

Copyright 2008 by Pearson Education 4 How the simulator works When you press "Go", the simulator enters a loop: move each animal once ( getMove ), in random order if the animal has moved onto an occupied square, fight ! if the animal has moved onto food, ask it if it wants to eat Key concept: The simulator is in control, NOT your animal. Example: getMove can return only one move at a time. getMove can't use loops to return a sequence of moves. Your animal must keep state (as fields) so that it can make a single move, and know what moves to make later.

Copyright 2008 by Pearson Education 5 Critter exercise Write a critter class Cougar (the dumbest of all animals): MethodBehavior eat Always eats. fight Always pounces. getColor Blue if the Cougar has never fought; red if he has. getMove The drunk Cougar staggers left 2, right 2, repeats. toString Always returns "C"

Copyright 2008 by Pearson Education 6 Ideas for state You must not only have the right state, but update that state properly when relevant actions occur. Counting is helpful: How many total moves has this animal made? How many times has it eaten? Fought? Remembering recent actions in fields is helpful: Which direction did the animal move last? How many times has it moved that way? Did the animal eat the last time it was asked? How many steps has the animal taken since last eating? How many fights has the animal been in since last eating?

Copyright 2008 by Pearson Education 7 Keeping state How can a critter move left 2, right 2, and repeat? public Direction getMove() { for (int i = 1; i <= 2; i++) { return Direction.WEST; } for (int i = 1; i <= 2; i++) { return Direction.EAST; } } private int moves; // total moves made by this Critter public Direction getMove() { moves++; if (moves % 4 == 1 || moves % 4 == 2) { return Direction.WEST; } else { return Direction.EAST; } }

Copyright 2008 by Pearson Education 8 Cougar solution public class Cougar extends Critter { private int moves; private boolean fought; public Cougar() { moves = 0; fought = false; } public boolean eat() { return true; } public Attack fight() { fought = true; return Attack.POUNCE; } public Color getColor() { if (fought) { return Color.RED; } else { return Color.BLUE; } public Direction getMove() { moves++; if (moves % 4 == 1 || moves % 4 == 2) { return Direction.WEST; } else { return Direction.EAST; } public String toString() { return "C"; }

Copyright 2008 by Pearson Education 9 Testing critters Focus on one specific Critter of one specific type Only spawn 1 of each Critter type Make sure your fields update properly Use println statements to see field values Look at the behavior one step at a time Use "Tick" rather than "Go"

Copyright 2008 by Pearson Education 10 A complex Critter: Snake MethodBehavior eat Never eats fight Randomly choose to roar or pounce getColor (red=20, green=50, blue=128) getMove 1 E, 1 S; 2 W, 1 S; 3 E, 1 S; 4 W, 1 S; 5 E,... toString Always returns "S"

Copyright 2008 by Pearson Education 11 Determining necessary fields Information required to decide what move to make? Direction to go in Length of current cycle Number of moves made in current cycle Information required to decide how to fight? A Random object

Copyright 2008 by Pearson Education 12 Snake solution import java.awt.*; // for Color import java.util.*; // for Random public class Snake extends Critter { private int length; // # steps in current horizontal cycle private int step; // # of cycle's steps already taken private Random rand; // for fighting public Snake() { length = 1; step = 0; rand = new Random(); } public Direction getMove() { step++; if (step > length) { // cycle was just completed length++; step = 0; return Direction.SOUTH; } else if (length % 2 == 1) { return Direction.EAST; } else { return Direction.WEST; }...

Copyright 2008 by Pearson Education 13 Snake solution 2... public Attack fight(String opponent) { int attack = rand.nextInt(2); if (attack == 0) { return Attack.POUNCE; } else { return Attack.ROAR; } public String toString() { return "S"; } public Color getColor() { return new Color(20, 50, 128); } // We don't need to write an eat method; // We can just keep the default eat behavior (returning false) }