Yvision.kzYvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
15:23, 25 мая 2011

healthcrock

import java.util.Vector;

public class HealthCrocodile extends Crocodile {

private static final int ENERGY_LOST_TO_DISEASE = 35;

private static final int LIFE_SPAN_OF_DISEASE = 5;

private static final String SPECIES = "HealthCrocodile";

private boolean isHealthy = true;

private boolean isImmune = false;

private int sickTimeBlocks = 0;

private static boolean shouldNextBeDiseased = true;

public HealthCrocodile(
int initialRow,
int initialColumn,
Simulation initialSimulation) {

super(
initialRow,
initialColumn,
initialSimulation);

//first crocodile should be diseased
//the remaining should be healthy
if (shouldNextBeDiseased) {
infect();
shouldNextBeDiseased = false;
}

}

public String getSpecies() {

return SPECIES;
}

private boolean isHealthy() {

return isHealthy;
}

private void cure() {

isHealthy = true;
}

private void infect() {

isHealthy = isImmune;
}

private void immunize() {

isImmune = true;
}

public String getImage() {

String imageBase = "/Crocodile-";
if(!isHealthy()) {
imageBase="/SickCrocodile-";
}

if (getDirection().equals(RIGHT)) {
return imageBase + "right.gif";
}
if (getDirection().equals(LEFT)) {
return imageBase + "left.gif";
}
if (getDirection().equals(UP)) {
return imageBase + "up.gif";
}
if (getDirection().equals(DOWN)) {
return imageBase + "down.gif";
}

return imageBase + "right.gif";
}

public void liveALittle() {

super.liveALittle();
if(!isHealthy()) {
progressDisease();
}
}

private void infectIfPossible() {

Vector cohabitant;
int neighborIndex;

cohabitant = simulation.getNeighbors(getRow(), getColumn(), 0);
for (neighborIndex = 0;
neighborIndex < cohabitant.size();
++neighborIndex) {

if (cohabitant.get(neighborIndex) instanceof HealthCrocodile) {
HealthCrocodile hc = (HealthCrocodile) cohabitant.get(neighborIndex);
hc.infect();
}
}
}

private void progressDisease() {

sickTimeBlocks++;
infectIfPossible();
setEnergy(getEnergy() - ENERGY_LOST_TO_DISEASE);
recoverIfPossible();
}

private boolean recoverIfPossible() {
if(sickTimeBlocks>LIFE_SPAN_OF_DISEASE) {
cure();
immunize();
return true;
}
return false;
}

}

0
187
1