Allow the capacity of a warren to vary, some warrens may be smaller and other may be larger
Within the warren class, a variable called MaxRabbitsInWarren is set to 99. The const declaration means it can't be changed during runtime. You must therefore remove the const:
private const int MaxRabbitsInWarren = 99;
Becomes:
private int MaxRabbitsInWarren = 99;
Warren Constructors
Both of the constructors below are used to create a warren. We need to add some code to both to set the size of the warren randomly.
public Warren(int Variability)
{
this.Variability = Variability;
Rabbits = new Rabbit[MaxRabbitsInWarren];
RabbitCount = (int)(CalculateRandomValue((int)(MaxRabbitsInWarren / 4), this.Variability));
for (int r = 0; r < RabbitCount; r++)
{
Rabbits[r] = new Rabbit(Variability);
}
}
public Warren(int Variability, int rabbitCount)
{
this.Variability = Variability;
this.RabbitCount = rabbitCount;
Rabbits = new Rabbit[MaxRabbitsInWarren];
for (int r = 0; r < RabbitCount; r++)
{
Rabbits[r] = new Rabbit(Variability);
}
}
We could therefore use the CalculateRandomValue() method to also create a random value for MaxRabbitsInWarren:
MaxRabbitsInWarren = (int)CalculateRandomValue(MaxRabbitsInWarren, Variability);
CalculateRandomValue will return a double, but we need to have an integer. Using (int)
will cast the double into an integer instead.
You should now have this:
public Warren(int Variability)
{
this.Variability = Variability;
MaxRabbitsInWarren = (int)CalculateRandomValue(MaxRabbitsInWarren, Variability);
Rabbits = new Rabbit[MaxRabbitsInWarren];
RabbitCount = (int)(CalculateRandomValue((int)(MaxRabbitsInWarren / 4), this.Variability));
for (int r = 0; r < RabbitCount; r++)
{
Rabbits[r] = new Rabbit(Variability);
}
}
public Warren(int Variability, int rabbitCount)
{
this.Variability = Variability;
MaxRabbitsInWarren = (int)CalculateRandomValue(MaxRabbitsInWarren, Variability);
this.RabbitCount = rabbitCount;
Rabbits = new Rabbit[MaxRabbitsInWarren];
for (int r = 0; r < RabbitCount; r++)
{
Rabbits[r] = new Rabbit(Variability);
}
}
Display Warren Size
You now need to edit the Inpsect method of the Warren class, this now needs to give a message to report the maximum number of rabbits allowed in the warren. This is the original:
public virtual void Inspect()
{
Console.WriteLine("Periods Run " + PeriodsRun + " Size " + RabbitCount);
}
With the extra code added:
public virtual void Inspect()
{
Console.WriteLine("Max Warren Size: " + MaxRabbitsInWarren);
Console.WriteLine("Periods Run " + PeriodsRun + " Size " + RabbitCount);
}
Run simulation with option 2
After testing this it will only work with option 2 from the initial menu, ie to run with custom settings. This is because option one has a specific number of rabbits for each warren, and to retain these values Variability is set to 0. So in the constructor which accepts 2 parameters you could give a specific value for Variability in the CalculateRandomValue method instead:
public Warren(int Variability, int rabbitCount)
{
this.Variability = Variability;
MaxRabbitsInWarren = (int)CalculateRandomValue(MaxRabbitsInWarren, 20);
this.RabbitCount = rabbitCount;
Rabbits = new Rabbit[MaxRabbitsInWarren];
for (int r = 0; r < RabbitCount; r++)
{
Rabbits[r] = new Rabbit(Variability);
}
}