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 >
Wrap
C/C++ Source or Header
|
1993-10-23
|
6KB
|
159 lines
/*****************************************************************************/
/* File : LINES.C Copyright (c) 1992 */
/* */
/* Author : Kenneth W. Hartlen */
/* Address : Box 37, Site 6, RR#3 */
/* Armdale, Nova Scotia */
/* B3L 4J3 Canada */
/* */
/* Purpose : Simple program that uses graphics commands and can be */
/* be compiled in Lattice, Sozobon and Turbo C. */
/* */
/* The program draws a Qix like object on the screen that */
/* moves around and rebounds off the sides of the screen. */
/* */
/*****************************************************************************/
/* Compiling with Lattice C: */
/* lc.ttp -fm lines.c */
/* clink.ttp c.o+lines.o */
/* LIB graphics.lib+lcm.lib+lcg.lib+lc.lib */
/* TO lines.prg */
/* */
/* Compiling with Sozobon C v2.0: */
/* cc -c lines.c */
/* cc -o lines.prg -r lines.o graphics.a aesfast.a vdifast.a */
/* */
/* Compiling with Heat & Serve Sozobon C v1.33i: */
/* cc -c lines.c */
/* cc -o lines.prg lines.o graphics.a libm.a aesfast.a \ */
/* vdifast.a */
/* */
/* Compiling with Turbo C: */
/* Use Turbo C's IDE */
/* */
/*****************************************************************************/
#ifdef SOZOBON /* Causes some graphics functions to */
#define __MAIN_SRC__ /* to be included with user's source */
#endif
#include <stdio.h> /* common header files */
#include <graphics.h>
#ifndef SOZOBON /* Ignore header files not available */
#include <stdlib.h> /* to Sozobon users */
#include <dos.h>
#endif
#ifdef __TURBOC__ /* include appropriate header file */
#include <conio.h> /* for kbhit() function */
#else
#include <osbind.h>
#endif
/*****************************************************************************/
/* Main program loop */
/*****************************************************************************/
#define MAXLINES 100 /* maximum # of lines to display */
#define MAXINC 20 /* maximum distance between lines */
void main()
{
int graphdriver = DETECT, graphmode;
int maxX, /* save getmaxx() result */
maxY, /* save getmaxy() result */
numLines, /* # of lines to display */
stepInc; /* distance between the lines */
int i, /* array indices used to treat */
j, /* arrays as a circular list to */
k; /* eliminate copying array contents */
int x1[MAXLINES+1],y1[MAXLINES+1], /* xy coords for end #1 */
x2[MAXLINES+1],y2[MAXLINES+1]; /* xy coords for end #2 */
int stepx1, /* how much to move x1 */
stepx2, /* how much to move x2 */
stepy1, /* how much to move y1 */
stepy2; /* how much to move y2 */
#ifdef __TURBOC__
struct time now;
#endif
#ifdef __TURBOC__ /* get system time for use as the */
gettime(&now); /* random number generator seed */
srand(now.ti_sec);
#else
srand(Tgettime());
#endif
/* initialize graphics */
initgraph(&graphdriver,&graphmode,"");
maxX = getmaxx(); /* save values to eliminate */
maxY = getmaxy(); /* function call in the do loop */
setwritemode(XOR_PUT);
setcolor(WHITE);
settextjustify(CENTER_TEXT,TOP_TEXT);
outtextxy(maxX/2,maxY/3,"LINES DEMO");
outtextxy(maxX/2,maxY/3+textheight("H")*2,"by Kenneth W. Hartlen");
outtextxy(maxX/2,maxY/3+textheight("H")*4,"Copyright (c) 1992");
outtextxy(maxX/2,maxY/3+textheight("H")*7,"press a key to end");
rectangle(0,0,maxX,maxY);
/* initialize variables */
numLines = (rand() % MAXLINES) + 1; /* how many lines? */
stepInc = (rand() % MAXINC) + 1; /* how far apart? */
stepx1=((rand()%stepInc) + 1) * (rand()%2 ? 1 : -1);
stepy1=((rand()%stepInc) + 1) * (rand()%2 ? 1 : -1);
stepx2=((rand()%stepInc) + 1) * (rand()%2 ? 1 : -1);
stepy2=((rand()%stepInc) + 1) * (rand()%2 ? 1 : -1);
for(k=1;k<=numLines;k++) {
x1[k]= y1[k]= x2[k] = y2[k] = 0;
}
i=1 ; j=0 ; k=2;
/* determine end points for first line */
x1[j]=rand()%maxX ; y1[j]=rand()%maxY;
x2[j]=rand()%maxX ; y2[j]=rand()%maxY;
do {
/* move the line and save the coords */
if ((x1[j]+stepx1<0) || (x1[j]+stepx1>maxX)) stepx1=-stepx1;
x1[i]=x1[j]+stepx1;
if ((y1[j]+stepy1<0) || (y1[j]+stepy1>maxY)) stepy1=-stepy1;
y1[i]=y1[j]+stepy1;
if ((x2[j]+stepx2<0) || (x2[j]+stepx2>maxX)) stepx2=-stepx2;
x2[i]=x2[j]+stepx2;
if ((y2[j]+stepy2<0) || (y2[j]+stepy2>maxY)) stepy2=-stepy2;
y2[i]=y2[j]+stepy2;
/* draw the new line in a visible colour */
line(x1[i],y1[i],x2[i],y2[i]);
/* update array indices */
if (i+1>numLines) i=1; else i++;
if (j+1>numLines) j=1; else j++;
if (k+1>numLines) k=1; else k++;
/* erase the k th line */
line(x1[k],y1[k],x2[k],y2[k]);
} while (!kbhit()); /* while key not pressed */
closegraph(); /* close graphics */
return;
} /* main */