home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_08_10 / 8n10054a < prev    next >
Text File  |  1990-08-26  |  6KB  |  139 lines

  1. /////////////////////////////////////////////////////////////////////////
  2. //                                                                     //
  3. //            Header file for ANTHILL simulation program               //
  4. //                                                                     //
  5. //                    by Mark Weaver and Alex Lane                     //
  6. //                                                                     //
  7. /////////////////////////////////////////////////////////////////////////
  8.  
  9. typedef unsigned char BOOLEAN;
  10. #define TRUE  1
  11. #define FALSE 0
  12.  
  13. #define BACKGROUND 0
  14. #define MAX_FOOD_SIZE 30000
  15.  
  16. // Types of ants
  17. enum antType { typeQueen, typeWorker, typeEgg } ;
  18.  
  19.  
  20. // Function Prototypes
  21. void moverDefaultDrawFunc(int, int, BOOLEAN, int);
  22. int distance(int, int, int, int);
  23. void showFood(int, int, BOOLEAN );
  24. void showStatus(void);
  25. void resetDefaults(void);
  26. void displayValues(void);
  27. unsigned getNumber(char *, unsigned, unsigned, 
  28.                          unsigned );
  29. char getChoice(void);
  30.  
  31.  
  32. //////////////////////////////////////////////////////////////////////////
  33. //                                                                      //
  34. //                        MOVER class definition                        // 
  35. //                                                                      //
  36. //////////////////////////////////////////////////////////////////////////
  37.  
  38. class Mover {
  39. private:
  40.      void moverDrawFunc(int, int, BOOLEAN, int); // Function to draw object
  41.      BOOLEAN bVisible;       // Is object currently visible on screen?
  42. protected:
  43.      int nInitX, nInitY;     // Original position
  44.      int nVelX;              // Velocity in X direction
  45.      int nVelY;              // Velocity in Y direction
  46.     unsigned uMaxRange;     // Max distance object moves from original pos.
  47.      unsigned uMaxSpeed;     // Max distance object moves in one cycle
  48.      int nX, nY;             // Current position
  49.      int color;              // Color of mover
  50. public:
  51.      Mover(unsigned, unsigned, int, int );
  52.      BOOLEAN moveTo(int, int );
  53.      BOOLEAN move( void );
  54.      void show( void );
  55.      void erase( void );
  56.      void draw( void ); 
  57.      virtual int getX( void ) = 0; 
  58.      virtual int getY( void ) = 0;
  59. };
  60.  
  61.  
  62. //////////////////////////////////////////////////////////////////////////
  63. //                                                                      //
  64. //                       CONSUMER class definition                      // 
  65. //                                                                      //
  66. //////////////////////////////////////////////////////////////////////////
  67.  
  68. class Consumer {
  69. public:
  70.      int nEnergy;           // If this reaches zero, it's curtains!
  71.      Consumer(int _nEnergy ) 
  72.              { nEnergy = _nEnergy; } // inline constructor
  73.      void eatFood( int );    // Eat food at current location
  74.      virtual int getX( void ) = 0;
  75.      virtual int getY( void ) = 0;
  76. };
  77.  
  78.  
  79. //////////////////////////////////////////////////////////////////////////
  80. //                                                                      //
  81. //                          ANT class definition                        // 
  82. //                                                                      //
  83. //////////////////////////////////////////////////////////////////////////
  84.  
  85. class Ant : public Consumer, public Mover { 
  86. protected:
  87.      int nLifeSpan;         // Age at which ant dies
  88.      unsigned nAge;         // How old is this ant
  89.      BOOLEAN bEgg;          // Am I an egg still?
  90. public:
  91.      BOOLEAN bDead;         // Does this ant bDead?
  92.      Ant( int, int, int, int, int );  // constructor 
  93.      void die(void);              // Assume room temperature
  94.      void doTheAntThing(void);    // Do whatever ants do
  95.      virtual int getX( void ) { return Mover::getX(); };
  96.      virtual int getY( void ) { return Mover::getY(); };
  97. };
  98.  
  99.  
  100. //////////////////////////////////////////////////////////////////////////
  101. //                                                                      //
  102. //                       QUEEN class definition                         //
  103. //                                                                      //
  104. //////////////////////////////////////////////////////////////////////////
  105. class Queen : public Ant {                // queen is derived from ant
  106. private:
  107.     unsigned birthRate;
  108. public:
  109.     Queen( unsigned,int,int,int,int,unsigned ); // Constructor function
  110.     void layEgg( void );                  // Queen can lay eggs
  111.     void doTheAntThing( void );           // Do whatever queen ants do
  112. };
  113.  
  114. //////////////////////////////////////////////////////////////////////////
  115. //                                                                      //
  116. //                      WORKER class definition                         //
  117. //                                                                      //
  118. //////////////////////////////////////////////////////////////////////////
  119. class Worker : public Ant {             // worker is derived from ant
  120.   private:
  121.      Worker *nextWorker;    // Pointer to next ant in list
  122.      Worker *prevWorker;    // Pointer to previous ant in list
  123.      int nFood;             // Indicates worker carrying food
  124.  
  125.     void dropFood();             // Drop food for queen
  126.     void grabFood(void);         // Pick up food
  127.     void moveTowardQueen(void);  // Carry food toward queen
  128.     void lookForFood(void);      // Search for more food
  129.     void addToList(void);        // Add self to head of list
  130.      void die(void);              // Assume room temperature
  131.  
  132.   public:
  133.      Worker( BOOLEAN, int, int); // Constructor Function
  134.      ~Worker(void);
  135.  
  136.      Worker *next(void){ return(nextWorker); } // Access function to next ptr
  137.      void doTheAntThing( void );
  138. };
  139.