#include #include #include #include #define YSIZE 58 #define XSIZE 80 #define XMUL 4 #define MOVE 1 #define WARM 16 #define SPEED 1 #define VGA #define DIAG #define ITER 65536 #define r() (rand48()) int board[2][YSIZE][XSIZE]; unsigned char dboard[YSIZE][XSIZE*4]; int t=0; double www[WARM][3]; double tm=0; #define FADE 15 #define new(y,x) board[t][(x)][(y)] #define old(y,x) board[1-t][(x)][(y)] #define d(y,x) dboard[x][y*XMUL]=dboard[x][y*XMUL+1]=dboard[x][y*XMUL+2]=dboard[x][y*XMUL+3] #ifdef VGA #include void init(void) { int r,g,b,x; vga_setmode(G320x200x256); r=g=b=0; for(x=0;x<256;x++) { if (x<64) r=x; else if (x<128) g=(x-64); else b=(x-128)/2; vga_setpalette(x,r,g,b); } } void done(void) { vga_setmode(TEXT); } void do_plot(int bx) { int y; for(y=0;y<(YSIZE-8);y++) { vga_drawscansegment(dboard[y+8],0,200-4*y,XSIZE*XMUL); vga_drawscansegment(dboard[y+8],0,200-4*y-1,XSIZE*XMUL); vga_drawscansegment(dboard[y+8],0,200-4*y-2,XSIZE*XMUL); vga_drawscansegment(dboard[y+8],0,200-4*y-3,XSIZE*XMUL); } } #else /* None */ void do_plot(int bx) {} void done(void) {} void init(void) {} #endif void update(void){ int x,y,bx; /* Most are average of neighbors */ for(y=SPEED;y<(YSIZE-1);y++) for(x=1;x<(XSIZE-1);x++) new(x,y+1)=(( #if defined(DIAG) old(x+1,y+1)+ old(x+1,y )+ old(x+1,y-1)+ old(x ,y+1)+ old(x ,y-1)+ old(x-1,y+1)+ old(x-1,y )+ old(x-1,y-1) )/8)-FADE; #elif defined(DOWN) old(x+1,y )+ old(x+1,y-1)+ old(x ,y-1)+ old(x-1,y )+ old(x-1,y-1) )/5)-FADE; #else old(x+1,y )+ old(x-1,y )+ old(x ,y+1)+ old(x ,y-1) )/4)-FADE; #endif for(x=1;x<(XSIZE-1);x++) new(x,SPEED)=(( #if defined(DIAG) old(x+1,1)+ old(x+1,0)+ old(x ,1)+ old(x-1,1)+ old(x-1,0) )/5)-FADE; #elif defined(DOWN) old(x+1,0)+ old(x-1,0) )/2)-FADE; #else old(x+1,0)+ old(x-1,0)+ old(x ,1) )/3)-FADE; #endif for(x=1;x<(XSIZE-1);x++) for(y=0;y2048) new(x,y)=2048; */ if (new(x,y)>1023) d(x,y)=255; else d(x,y)=new(x,y)>>2; } do_plot(bx); t=1-t; } int main(int argc, char**argv) { long t=time(NULL); int i,count=ITER; argc==1?srand48(t):srand48(atoi(argv[1])); t=drand48()*12; for(i=0;i