1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
// File : oop/Kingdom.java
// Purpose: Represents a "kingdom".
// Author : Fred Swartz
// Date : 05 May 2005
class Kingdom {
//============================================================== constants
public static int MIN_GRAIN_TO_SURVIVE = 20;
public static int MAX_LAND_FARMABLE_PER_PERSON = 10;
public static int SEED_REQUIRED_PER_ACRE = 2;
//===================================================== instance variables
private int myPopulation = 100;
private int myGrain = 3000;
private int myArea = 1000;
//========================================================== getPopulation
public int getPopulation() {
return myPopulation;
}
//=============================================================== getGrain
public int getGrain() {
return myGrain;
}
//================================================================ getArea
public int getArea() {
return myArea;
}
//================================================== getAmountOfFoodNeeded
public int getAmountOfFoodNeeded() {
return myPopulation * MIN_GRAIN_TO_SURVIVE;
}
//=================================================== getMaximumUsableSeed
/** Compute the maximum number of bushels of seed that can be used
* based on the number of peasants for farming, and the amount of
* land.
*/
public int getMaximumUsableSeed() {
int peasantFarmableArea = myPopulation * MAX_LAND_FARMABLE_PER_PERSON;
int maxFarmableArea = Math.min(myArea, peasantFarmableArea);
return SEED_REQUIRED_PER_ACRE * maxFarmableArea;
}
//======================================================== simulateOneYear
public void simulateOneYear(int food, int seed) {
//... Don't allow illegal parameter values. These values
// should have been checked before calling this method.
// Bad values should have been corrected in the user interface.
assert food >= 0 && seed >= 0 : "simulateOneYear negative values.";
assert food + seed <= myGrain : "simulateOneYear parameters too large.";
//... Remove the requested amount of grain from storage
myGrain = myGrain - food - seed;
//... Compute the random harvest.
int usableSeed = Math.min(seed, getMaximumUsableSeed());
int acresPlanted = usableSeed / SEED_REQUIRED_PER_ACRE;
int yieldPerAcre = 2 + (int)(5 * Math.random());
int harvest = yieldPerAcre * acresPlanted;
//... Compute the new population
myPopulation = myPopulation * food / getAmountOfFoodNeeded();
//... Add the new havest to the grain in storage.
myGrain += harvest;
}
}
|