home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / alde_c / misc / graph / simgrafc / demo5.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-02-10  |  3.9 KB  |  183 lines

  1. #include    <stdio.h>
  2.  
  3. #define    CHAINS    4
  4. #define    LINES    12
  5. #define    XMIN    0
  6. #define    XMAX    319
  7. #define    YMIN    0
  8. #define    YMAX    199
  9. #define    DXMAX    8
  10. #define    DYMAX    4
  11. #define    HICOLOR    3
  12. #define COLORMAX    3
  13. #define W1XMIN      1
  14. #define W1YMIN      1
  15. #define W1XMAX     79
  16. #define W1YMAX     59
  17. #define W2XMIN    161
  18. #define W2YMIN      1
  19. #define W2XMAX    318
  20. #define W2YMAX    198
  21. #define W3XMIN     40
  22. #define W3YMIN    100
  23. #define W3XMAX    120
  24. #define W3YMAX    179
  25.  
  26. int    ax[CHAINS*LINES],ay[CHAINS*LINES],adx[CHAINS],ady[CHAINS];
  27. int    bx[CHAINS*LINES],by[CHAINS*LINES],bdx[CHAINS],bdy[CHAINS];
  28. int    lax[CHAINS],lay[CHAINS],lbx[CHAINS],lby[CHAINS];
  29. int    color[CHAINS];
  30. int    chain,line,lptr,i;
  31. int     x3,y3,x4,y4,clrb;
  32. main()
  33. {
  34. int i,j,x,y,clr;
  35.  
  36.    g_init();
  37.    g_pal(0);
  38.    g_bakgnd(1);
  39.    clrb = 1;
  40.    resetbox();
  41.  
  42.    randseed(0,0);
  43.    
  44.    initlines();
  45.     
  46.    g_window(W1XMIN,W1YMIN,W1XMAX,W1YMAX);
  47.    box(W1XMIN-1,W1YMIN-1,W1XMAX+1,W1YMAX+1,1);
  48.    box(W2XMIN-1,W2YMIN-1,W2XMAX+1,W2YMAX+1,1);
  49.  
  50. while (!keyboard(1))
  51.    {
  52.        display();
  53.    }
  54.    getch();
  55.    g_text(80);
  56. }
  57.  
  58. plotpoint()
  59. {  
  60. int x,y,clr;
  61.        x = rand(XMAX);
  62.        y = rand(YMAX);
  63.        clr = 1 + rand(COLORMAX);
  64.        g_dot(x,y,clr);
  65. }  
  66.  
  67. initlines()
  68. {             /****  INITIALIZE EACH LINE CHAIN  ****/
  69.       for (chain=0; chain<CHAINS; ++chain)
  70.    {
  71.       lax[chain] = lbx[chain] = (W2XMIN+W2XMAX)/2;
  72.       lay[chain] = (W2YMIN+W2YMAX)/2 - 20;
  73.       lby[chain] = (W2YMIN+W2YMAX)/2 + 20;
  74.       color[chain] = rand(HICOLOR)+1;
  75.       adx[chain] = (rand(1)?1:-1) * (rand(DXMAX)+1);
  76.       ady[chain] = (rand(1)?1:-1) * (rand(DYMAX)+1);
  77.       bdx[chain] = (rand(1)?1:-1) * (rand(DXMAX)+1);
  78.       bdy[chain] = (rand(1)?1:-1) * (rand(DYMAX)+1);
  79.    }
  80. }
  81.  
  82. display()
  83. {
  84. int k;
  85.       for (line=0; line<LINES; ++line)
  86.      for (chain=0; chain<CHAINS; ++chain)
  87.      {
  88.         lptr = chain*LINES+line;
  89.         g_line(ax[lptr],ay[lptr],bx[lptr],by[lptr],0);    /* ERASE LINE */
  90.         newline();
  91.         g_line(ax[lptr],ay[lptr],bx[lptr],by[lptr],color[chain]); /*DRAW*/
  92.             for (k=0; k<=6; ++k)
  93.                 {
  94.                 plotpoint();
  95.                 }
  96.             if (x4>130)
  97.                resetbox();
  98.             else
  99.                growbox();
  100.      }
  101. }
  102.  
  103. newline()
  104. {
  105.    int change=0;
  106.  
  107.                 /** CALC NEW AX **/
  108.    i = lax[chain]+adx[chain];
  109.    if (i>=W2XMIN && i<=W2XMAX)
  110.       lax[chain]=ax[lptr]=i;
  111.    else
  112.    {
  113.       lax[chain]+= (adx[chain]= (adx[chain]<0 ?1:-1)*(rand(DXMAX)+1));
  114.       ax[lptr]=lax[chain];
  115.       change=1;
  116.    }
  117.  
  118.                 /** CALC NEW AY **/
  119.    i = lay[chain]+ady[chain];
  120.    if (i>=W2YMIN && i<=W2YMAX)
  121.       lay[chain]=ay[lptr]=i;
  122.    else
  123.    {
  124.       lay[chain]+= (ady[chain]= (ady[chain]<0 ?1:-1)*(rand(DYMAX)+1));
  125.       ay[lptr]=lay[chain];
  126.       change=1;
  127.    }
  128.  
  129.                 /** CALC NEW BX **/
  130.    i = lbx[chain]+bdx[chain];
  131.    if (i>=W2XMIN && i<=W2XMAX)
  132.       lbx[chain]=bx[lptr]=i;
  133.    else
  134.    {
  135.       lbx[chain]+= (bdx[chain]= (bdx[chain]<0 ?1:-1)*(rand(DXMAX)+1));
  136.       bx[lptr]=lbx[chain];
  137.       change=1;
  138.    }
  139.  
  140.                 /** CALC NEW BY **/
  141.    i = lby[chain]+bdy[chain];
  142.    if (i>=W2YMIN && i<=W2YMAX)
  143.       lby[chain]=by[lptr]=i;
  144.    else
  145.    {
  146.       lby[chain]+= (bdy[chain]= (bdy[chain]<0 ?1:-1)*(rand(DYMAX)+1));
  147.       by[lptr]=lby[chain];
  148.       change=1;
  149.    }
  150.  
  151.         /** CHANGE COLOR IF DIRECTION CHANGE **/
  152.    if (change)
  153.       color[chain] = rand(HICOLOR)+1;
  154.  
  155. }
  156. box(x1,y1,x2,y2,clr)
  157. int x1,y1,x2,y2,clr;
  158. {
  159.     g_line(x1,y1,x2,y1,clr);
  160.     g_line(x2,y1,x2,y2,clr);
  161.     g_line(x2,y2,x1,y2,clr);
  162.     g_line(x1,y2,x1,y1,clr);
  163. }
  164. pause()
  165. {
  166.     int l;
  167.     for (l=0; l<=20000; ++l) {}
  168. }
  169. growbox()
  170. {
  171.    box(x3,y3,x4,y4,clrb);
  172.    x3 -= 1;
  173.    y3 -= 1;
  174.    x4 += 1;
  175.    y4 += 1;
  176. }
  177. resetbox()
  178. {
  179.    x3 = x4 =  80;
  180.    y3 = y4 = 130;
  181.    clrb = 1 + (clrb+1)%3;
  182. }
  183.