P4's goal is to design the C# classes needed to track creature viability in a MMO game under development.
Part I: Class design
1) GameCreature class (with derived types PredatorCreature and AgileCreature) as defined in P3.
2) Addition of functionality to order, rank, compare, sort GameCreature objects (includes parent and derived types) according to anticipated rate of energy consumption (calculated internally).
3) Ability to cull GameCreature objects (includes parent and derived types) from gameplay when rate of energy consumption is too high or too low.
4) A game is played with a collection of GameCreatures, a variety of parent and child types.
Clearly, many details are missing. You must use operator overloading.
Make reasonable design decisions so that your classes satisfy the stated goals, communicate assumptions and use, and yield clear and maintainable software.
Use ProgrammingByContract to specify pre and post conditions; interface, implementation and class invariants. Relationships should be noted in the appropriate invariants.
You MUST reuse all GameCreature classes from P3.
Part II: Driver
Design a driver to demonstrate program requirements: Do not skimp on your driver's design
Clearly specify the intent and structure of your driver. You should have collections of distinct objects, initialized appropriately, i.e. random distribution of objects with arbitrary initial values (values should be reasonable) meaningful base values for non-arbitrary initial values.