class Object // Essentially a Circle { protected: double xpos,ypos,radius,angle; Player *creator; public: Object(double x, double y, double r, double a, Player *p); Player *Creator(); virtual void Move() = 0; virtual void Unmove() = 0; virtual void Draw(Player *p) = 0; void Undraw(Player *p); bool Contained( double x, double y, double w, double h); friend bool Intersect(Object *obj1, Object *obj2); };
class Rock : public Object { public: Rock(double x, double y, double r); void Draw(Player *p); void Move(); void Unmove(); };
class Tank : public Object { public: Tank(double x, double y, double a, Player *p); void Draw(Player *p); void Move(); void Unmove(); };
class Shot : public Object { public: Shot(double x, double y, double r, double a, Player *p); Shot( Object& obj ); void Draw(Player *p ); void Move(); void Unmove(); };
class ObjectStack { protected: Object *ObjectList[256]; int nObjects; public: ObjectStack(); Object *Peek(int pos); int Size(); int Push(Object *obj); void Kill(int pos); void Draw(Player *p); void Undraw(Player *p); int FindCollisions(Object *obj); };
lass Player : public Console { protected: bool forward; bool backward; bool left; bool right; bool hide; int invisibility; int lives; int shots; Tank *tank; public: ~Player(); Player(char *displaystring, int w, int h); bool hasShots(); bool isAlive(); bool isActive(); bool isHidden(); bool turnLeft(); bool turnRight(); bool moveForward(); bool moveBackward(); void EventHandler(); void ShotKilled(); void TankKilled(); void UpdateTitle(); };
class Rectangle { protected: double x,y,w,h; public: Rectangle(double a, double b, double c, double d); void Draw(Player *p); };
class Text { protected: char *text; int length; double x,y; public: Text(char *t, int l, double a, double b); void Draw(Player *p); };
enum Color {Default,Black,Blue,White,Red,Green,nColors}; enum Action {NoAction, Quit, Fire, Place, HideOn, HideOff, ForwardOn, ForwardOff, BackwardOn, BackwardOff, LeftOn, LeftOff, RightOn, RightOff}; class Console { private: Display *display; int screen; int depth; Window window; Pixmap bitmap; XFontStruct *font; GC gc[nColors]; public: Console(char *displaystring, int w, int h); ~Console(); void DrawText(char *text, int length, double x, double y, Color color); void DrawLine(double x1, double y1, double x2, double y2, Color color); void DrawRectangle(double x, double y, double w, double h, Color color); void DrawFilledCircle(double x, double y, double r, Color color); void DrawCircle(double x, double y, double r, Color color); void UpdateArea(double x, double y, double w, double h); void SetTitle(char *text); Action GetEvent(); void Sync(); };