Listing 7

001  #include <stdio.h>
002  #include <stdarg.h>
003  #include "utility.h"
004
005  /*********************************************************/
006  /* CLASS GRAPHICAL OBJECT */
007
008  class graph_obj {
009  public:
010      int y;
011      int x;
012      void init(int y, int x);
013      void move(int y, int x);
014      virtual void draw(int color){};
015  };
016
017  void graph_obj::init(int y2, int x2)
018  {
019      y = y2;
020      x = x2;
021  }
022
023  void graph_obj::move(int y_delta, int x_delta)
024  {
025      draw(g_black);
026      x += x_delta;
027      y += y_delta;
028      draw(g_white);
029  }
030
031  /*********************************************************/
032  /* CLASS CIRCLE */
033
034  class circle: public graph_obj {
035  public:
036      int radius;
037      void init(int y, int x, int radius);
038      void draw(int color);
039  };
040
041  void circle::init(int y2, int x2, int radius2)
042  {
043      graph_obj::init(y2, x2);
044      radius = radius2;
045      draw(g_white);
046  }
047
048  void circle::draw(int color)
049  {
050      g_circle(y, x, radius, color);
051  }
052
053  /*********************************************************/
054  /* CLASS SQUARE */
055
056  class square: public graph_obj {
057  public:
058      int size;
059      void init(int y, int x, int radius);
060      void draw(int color);
061  };
062
063  void square::init(int y2, int x2, int size2)
064  {
065      graph_obj::init(y2, x2);
066      size = size2;
067      draw(g_white);
068  }
069
070  void square::draw(int color)
071  {
072      g_square(y, x, size, color);
073  }
074
075  /*********************************************************/
076  /* CLASS DOUBLE_CIRCLE */
077
078  class double_circle: public circle {
079  public:
080      void draw(int color);
081  };
082
083  void double_circle::draw(int color)
084  {
085      g_circle(y, x, radius, color);
086      g_circle(y, x, radius - 2, color);
087  }
088
089  /********************************************************/
090
091  int main(void);
092  int main(void)
093  {
094      int x;
095      circle c1;
096      square s1;
097      double_circle dc1;
098      g_init();
099      c1.init(40, 40, 20);
100      s1.init(40, 100, 20);
101      dc1.init(40, 160, 20);
102      for (x = 0; x < 100; ++x) {
103          c1.move(1, 1);
104          s1.move(1, 0);
105          dc1.move(0, -1);
106      }
107      cleanup();
108      return (0);
109  }