home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
files
/
gnu
/
crssrc12
/
twinkle.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-29
|
2KB
|
110 lines
/* sample application using curses calls, this takes about 25 seconds on the */
/* Atari and over 6 minutes on a mainframe, using a vt100 on a 4800 baud */
/* line. Even on the mainframe it uses 24 seconds of computation time. */
/* see copyright notice in curses.c */
/* #include "portab.h" forbidden in MW C */
#include "curses.h"
#define NCOLS 80
#define NLINES 24
#define MAXPATT 4
#ifndef MEGAMAX
extern unsigned rand();
#endif
struct locs {
char y,x ;
} ;
typedef struct locs LOCS ;
LOCS Layout[NCOLS*NLINES] ;;
int pat ;
int nstar ;
main()
{
int i ;
initscr() ;
if (ERR) {
fprintf(stderr, "Unable to initialize\n");
exit(1);
}
leaveok(stdscr,1) ;
for ( i = 0 ; i < 10 ; i++ )
{
if (ERR) {
fprintf(stderr, "Error in makeboard loop\n");
exit(2);
}
makeboard() ;
puton('*') ;
puton(' ') ;
} ;
endwin() ;
}
makeboard()
{
int y,x ;
LOCS *lp ;
pat = rand() % MAXPATT ;
lp = Layout ;
for ( y = 0 ; y < NLINES ; y++ )
for ( x = 0 ; x < NCOLS ; x++ )
if ( ison(y,x) )
{
lp->y = y ;
lp->x = x ;
lp++ ;
} ;
nstar = lp - Layout ;
}
ison(y,x)
int y,x ;
{
switch ( pat )
{
case 0:
return(!(y & 0x01)) ;
case 1:
if ( x >= NLINES && y >= NCOLS )
return(0) ;
if ( y < 3 || y >= NLINES - 3 )
return(1) ;
return((x < 3 || x >= NCOLS - 3 )) ;
case 2:
return(((x+y) & 0x01)) ;
case 3:
return(( y>= 9 && y <= 15 )) ;
} ;
}
puton(ch)
char ch ;
{
LOCS *lp, *end, temp ;
int r ;
end = &(Layout[nstar]) ;
for ( lp = Layout ; lp < end ; lp++ )
{
r = rand() % nstar ;
temp = *lp ;
*lp = Layout[r] ;
Layout[r] = temp ;
} ;
for ( lp = Layout ; lp < end ; lp++ )
{
mvaddch(lp->y,lp->x,ch) ;
refresh() ;
} ;
}