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 / demo4.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-01-13  |  2.5 KB  |  106 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    10
  10. #define    DYMAX    6
  11. #define    HICOLOR    3
  12.  
  13. int    ax[CHAINS*LINES],ay[CHAINS*LINES],adx[CHAINS],ady[CHAINS];
  14. int    bx[CHAINS*LINES],by[CHAINS*LINES],bdx[CHAINS],bdy[CHAINS];
  15. int    lax[CHAINS],lay[CHAINS],lbx[CHAINS],lby[CHAINS];
  16. int    color[CHAINS];
  17. int    chain,line,lptr,i;
  18.  
  19. _main()
  20. {
  21.    g_init();        /*    Put screen in Medium Res Graphics Mode    */
  22.    g_pal(1);
  23.    g_bakgnd(0);
  24.    randseed(0,0);
  25.    
  26.                  /****  INITIALIZE EACH LINE CHAIN  ****/
  27.       for (chain=0; chain<CHAINS; ++chain)
  28.    {
  29.       lax[chain] = lbx[chain] = (XMIN+XMAX)/2;
  30.       lay[chain] = (YMIN+YMAX)/2 - 20;
  31.       lby[chain] = (YMIN+YMAX)/2 + 20;
  32.       color[chain] = rand(HICOLOR)+1;
  33.       adx[chain] = (rand(1)?1:-1) * (rand(DXMAX)+1);
  34.       ady[chain] = (rand(1)?1:-1) * (rand(DYMAX)+1);
  35.       bdx[chain] = (rand(1)?1:-1) * (rand(DXMAX)+1);
  36.       bdy[chain] = (rand(1)?1:-1) * (rand(DYMAX)+1);
  37.    }
  38.  
  39.    line = 0;
  40.    while (!keyboard(1))  /** WHILE (no key) **/
  41.       for (line=0; line<LINES; ++line)
  42.      for (chain=0; chain<CHAINS; ++chain)
  43.      {
  44.         lptr = chain*LINES+line;
  45.         g_line(ax[lptr],ay[lptr],bx[lptr],by[lptr],0);    /* ERASE LINE */
  46.         newline();
  47.         g_line(ax[lptr],ay[lptr],bx[lptr],by[lptr],color[chain]); /*DRAW*/
  48.      }
  49.    g_text(80);
  50.    _exit();
  51. }
  52.  
  53.  
  54. newline()
  55. {
  56.    int change=0;
  57.  
  58.                 /** CALC NEW AX **/
  59.    i = lax[chain]+adx[chain];
  60.    if (i>=XMIN && i<=XMAX)
  61.       lax[chain]=ax[lptr]=i;
  62.    else
  63.    {
  64.       lax[chain]+= (adx[chain]= (adx[chain]<0 ?1:-1)*(rand(DXMAX)+1));
  65.       ax[lptr]=lax[chain];
  66.       change=1;
  67.    }
  68.  
  69.                 /** CALC NEW AY **/
  70.    i = lay[chain]+ady[chain];
  71.    if (i>=YMIN && i<=YMAX)
  72.       lay[chain]=ay[lptr]=i;
  73.    else
  74.    {
  75.       lay[chain]+= (ady[chain]= (ady[chain]<0 ?1:-1)*(rand(DYMAX)+1));
  76.       ay[lptr]=lay[chain];
  77.       change=1;
  78.    }
  79.  
  80.                 /** CALC NEW BX **/
  81.    i = lbx[chain]+bdx[chain];
  82.    if (i>=XMIN && i<=XMAX)
  83.       lbx[chain]=bx[lptr]=i;
  84.    else
  85.    {
  86.       lbx[chain]+= (bdx[chain]= (bdx[chain]<0 ?1:-1)*(rand(DXMAX)+1));
  87.       bx[lptr]=lbx[chain];
  88.       change=1;
  89.    }
  90.  
  91.                 /** CALC NEW BY **/
  92.    i = lby[chain]+bdy[chain];
  93.    if (i>=YMIN && i<=YMAX)
  94.       lby[chain]=by[lptr]=i;
  95.    else
  96.    {
  97.       lby[chain]+= (bdy[chain]= (bdy[chain]<0 ?1:-1)*(rand(DYMAX)+1));
  98.       by[lptr]=lby[chain];
  99.       change=1;
  100.    }
  101.  
  102.         /** CHANGE COLOR IF DIRECTION CHANGE **/
  103.    if (change)
  104.       color[chain] = rand(HICOLOR)+1;
  105.  
  106. }