home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / program / graphx11 / lines.c < prev    next >
C/C++ Source or Header  |  1993-10-23  |  6KB  |  159 lines

  1. /*****************************************************************************/
  2. /*      File    : LINES.C            Copyright (c) 1992           */
  3. /*                                                                           */
  4. /*    Author    : Kenneth W. Hartlen                         */
  5. /*    Address    : Box 37, Site 6, RR#3                         */
  6. /*          Armdale, Nova Scotia                         */
  7. /*          B3L 4J3 Canada                         */
  8. /*                                         */
  9. /*      Purpose : Simple program that uses graphics commands and can be         */
  10. /*          be compiled in Lattice, Sozobon and Turbo C.             */
  11. /*                                         */
  12. /*          The program draws a Qix like object on the screen that     */
  13. /*          moves around and rebounds off the sides of the screen.     */
  14. /*                                                                           */
  15. /*****************************************************************************/
  16. /*    Compiling with Lattice C:                         */
  17. /*        lc.ttp -fm lines.c                         */
  18. /*        clink.ttp c.o+lines.o                         */
  19. /*            LIB graphics.lib+lcm.lib+lcg.lib+lc.lib             */
  20. /*            TO lines.prg                         */
  21. /*                                                                           */
  22. /*    Compiling with Sozobon C v2.0:                         */
  23. /*        cc -c lines.c                             */
  24. /*        cc -o lines.prg -r lines.o graphics.a aesfast.a vdifast.a    */
  25. /*                                                                           */
  26. /*    Compiling with Heat & Serve Sozobon C v1.33i:                 */
  27. /*        cc -c lines.c                             */
  28. /*        cc -o lines.prg lines.o graphics.a libm.a aesfast.a \         */
  29. /*                vdifast.a                     */
  30. /*                                                                           */
  31. /*    Compiling with Turbo C:                             */
  32. /*        Use Turbo C's IDE                         */
  33. /*                                                                           */
  34. /*****************************************************************************/
  35.  
  36. #ifdef SOZOBON                /* Causes some graphics functions to */
  37. #define __MAIN_SRC__            /* to be included with user's source */
  38. #endif
  39.  
  40. #include <stdio.h>            /* common header files */
  41. #include <graphics.h>
  42.  
  43. #ifndef SOZOBON                /* Ignore header files not available */
  44. #include <stdlib.h>            /* to Sozobon users             */
  45. #include <dos.h>
  46. #endif
  47.  
  48. #ifdef __TURBOC__            /* include appropriate header file   */
  49. #include <conio.h>            /* for kbhit() function             */
  50. #else
  51. #include <osbind.h>
  52. #endif
  53.  
  54. /*****************************************************************************/
  55. /*  Main program loop                                                        */
  56. /*****************************************************************************/
  57.  
  58. #define    MAXLINES    100        /* maximum # of lines to display */
  59. #define MAXINC        20        /* maximum distance between lines */
  60.  
  61. void main()
  62. {
  63. int     graphdriver = DETECT, graphmode;
  64.  
  65. int    maxX,                /* save getmaxx() result */
  66.     maxY,                /* save getmaxy() result */
  67.     numLines,            /* # of lines to display */
  68.     stepInc;            /* distance between the lines */
  69.     
  70. int    i,                /* array indices used to treat      */
  71.     j,                /* arrays as a circular list to     */
  72.     k;                /* eliminate copying array contents */
  73.     
  74. int    x1[MAXLINES+1],y1[MAXLINES+1],    /* xy coords for end #1 */
  75.     x2[MAXLINES+1],y2[MAXLINES+1];    /* xy coords for end #2 */
  76.     
  77. int    stepx1,                /* how much to move x1 */
  78.     stepx2,                /* how much to move x2 */
  79.     stepy1,                /* how much to move y1 */
  80.     stepy2;                /* how much to move y2 */
  81.  
  82. #ifdef __TURBOC__
  83. struct time now;
  84. #endif
  85.  
  86.     #ifdef __TURBOC__            /* get system time for use as the */
  87.     gettime(&now);            /* random number generator seed   */
  88.     srand(now.ti_sec);
  89.     #else
  90.     srand(Tgettime());
  91.     #endif
  92.  
  93.     /* initialize graphics */    
  94.     initgraph(&graphdriver,&graphmode,"");
  95.     
  96.     maxX = getmaxx();            /* save values to eliminate     */
  97.     maxY = getmaxy();            /* function call in the do loop */
  98.         
  99.     setwritemode(XOR_PUT);
  100.     setcolor(WHITE);
  101.     
  102.     settextjustify(CENTER_TEXT,TOP_TEXT);
  103.     outtextxy(maxX/2,maxY/3,"LINES DEMO");
  104.     outtextxy(maxX/2,maxY/3+textheight("H")*2,"by Kenneth W. Hartlen");
  105.     outtextxy(maxX/2,maxY/3+textheight("H")*4,"Copyright (c) 1992");
  106.     outtextxy(maxX/2,maxY/3+textheight("H")*7,"press a key to end");
  107.     rectangle(0,0,maxX,maxY);
  108.         
  109.     /* initialize variables */
  110.     numLines = (rand() % MAXLINES) + 1;    /* how many lines? */
  111.     stepInc = (rand() % MAXINC) + 1;    /* how far apart? */
  112.     
  113.     stepx1=((rand()%stepInc) + 1) * (rand()%2 ? 1 : -1);
  114.     stepy1=((rand()%stepInc) + 1) * (rand()%2 ? 1 : -1);
  115.     stepx2=((rand()%stepInc) + 1) * (rand()%2 ? 1 : -1);
  116.     stepy2=((rand()%stepInc) + 1) * (rand()%2 ? 1 : -1);
  117.  
  118.     for(k=1;k<=numLines;k++) {
  119.     x1[k]= y1[k]= x2[k] = y2[k] = 0;
  120.     }
  121.     
  122.     i=1 ; j=0 ; k=2;
  123.  
  124.     /* determine end points for first line */    
  125.     x1[j]=rand()%maxX ; y1[j]=rand()%maxY;
  126.     x2[j]=rand()%maxX ; y2[j]=rand()%maxY;
  127.  
  128.     do {
  129.         /* move the line and save the coords */
  130.     if ((x1[j]+stepx1<0) || (x1[j]+stepx1>maxX)) stepx1=-stepx1;
  131.     x1[i]=x1[j]+stepx1;
  132.     if ((y1[j]+stepy1<0) || (y1[j]+stepy1>maxY)) stepy1=-stepy1;
  133.     y1[i]=y1[j]+stepy1;
  134.     if ((x2[j]+stepx2<0) || (x2[j]+stepx2>maxX)) stepx2=-stepx2;
  135.     x2[i]=x2[j]+stepx2;
  136.     if ((y2[j]+stepy2<0) || (y2[j]+stepy2>maxY)) stepy2=-stepy2;
  137.     y2[i]=y2[j]+stepy2;
  138.     
  139.     /* draw the new line in a visible colour */
  140.     line(x1[i],y1[i],x2[i],y2[i]);
  141.  
  142.     /* update array indices */
  143.     if (i+1>numLines) i=1; else i++;
  144.     if (j+1>numLines) j=1; else j++;
  145.     if (k+1>numLines) k=1; else k++;
  146.     
  147.     /* erase the k th line */
  148.     line(x1[k],y1[k],x2[k],y2[k]);
  149.     
  150.     } while (!kbhit());            /* while key not pressed */
  151.  
  152.     closegraph();            /* close graphics */
  153.     return;
  154.         
  155. } /* main */
  156.  
  157.  
  158.  
  159.