I am trying to find a way to get the number of Cops that are in the world and then store in
a variable as an integer.
My reason for this is that I want to be able to have a specific number of Cops in my world
and when one or more cops is destroyed, one will be created in my world.
here is my Cop class.
I tried using the getObjects() method, but it did not work because it needed to be an integer.
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class Cop here.
*
* @author (Jason Mattis)
* @version (10/13/2012)
*/
public class Cop extends Vehicle
{
private static final int ANIMATE_DELAY = 10;
private static final int TURN_DELAY = 50;
private int copDelayCount;
private int turnDelayCount;
private GreenfootImage image1;
private GreenfootImage image2;
/**
* Act - do whatever the Cop wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void act()
{
move(5);
turnAtEdge();
eatCar();
checkAnimatedCop();
randomTurnDelay();
}
/**
* initiates the timer.
*/
private void animatedDelayAmount()
{
copDelayCount = ANIMATE_DELAY;
}
/**
* Checks to see if the timer is greater than zero. If this is true, it decrements the count
* by one. When the count reaches zero, the animateCop method is called.
*/
private void checkAnimatedCop()
{
if ( copDelayCount > 0)
{
copDelayCount--;
if (copDelayCount == 0){
animateCop();
}
}
}
/**
* Alternates two cop car images to create an animation of the lights flashing.
*/
public void animateCop()
{
if ( getImage() == image1 )
{
setImage(image2);
}
else
{
setImage(image1);
}
animatedDelayAmount(); //resets count to default
}
/**
* Create a Cop and initialize its two images.
*/
public Cop()
{
image1 = new GreenfootImage("Cop.png");
image2 = new GreenfootImage("Cop2.png");
setImage(image1);
copDelayCount = 0;
animatedDelayAmount();
turnCopDelayCount();
}
/**
* Check to see if the Car is at the edge of the map. If
* it is, then it turns around 17 degrees.
*
*/
public void turnAtEdge()
{
if ( atWorldEdge() )
{
turn(17);
}
}
private void turnCopDelayCount()
{
turnDelayCount = TURN_DELAY;
}
private void randomTurnDelay()
{
if (turnDelayCount > 0)
{
turnDelayCount--;
if (turnDelayCount == 0){
randomMovement();
}
}
}
/**
* Makes the Cop car move left or right randomly 45 degrees. The chance of
* the Cop move left or right is chosen randomly out of 100. If the number
* is less than 10, it will execute that turn.
*/
public void randomMovement()
{
turn( Greenfoot.getRandomNumber(180) - 90);
turnCopDelayCount();
}
/**
* Allows the Cop to go to the edge of the world and appear on the oppisite side.
*/
public void setLocation(int x, int y)
{
int width = getWorld().getWidth();
int height = getWorld().getHeight();
while (x >= width)
{
x -= width;
}
while (x < 0)
{
x += width;
}
while (y >= height)
{
y -= height;
}
while (y < 0)
{
y += height;
}
super.setLocation(x, y);
}
/**
* Checks whether the Cop is at a Car. If the Cop is at one, it
* pulls the Car over.
*/
public void eatCar()
{
if ( canSee(Car.class) )
{
eat(Car.class);
Greenfoot.stop();
Greenfoot.playSound("short-siren.mp3");
}
}
}