home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!mcsun!chsun!pegasus.ch!superuser
- From: superuser@pegasus.ch
- Newsgroups: vmsnet.sources.games
- Subject: Game of Life 2/2
- Message-ID: <1992Mar23.223427.33@pegasus.ch>
- Date: 23 Mar 92 21:34:27 GMT
- Organization: Pegasus BBS, Switzerland
- Lines: 464
-
- +-+-+-+ Beginning of part 2 +-+-+-+
- X`009if (memory[2][2]==1)`009`009livecells++;
- X`009if (memory[width][hight]==1)`009livecells++;
- X`009if (memory[2][hight]==1)`009livecells++;
- X`009if (memory[width][2]==1)`009livecells++;
- X`009livecells=lifeloop(livecells);
- X
- X`009/* upper right corner */
- X`009x=width; y=1;
- X`009if (memory[width-1][1]==1)`009livecells++;
- X`009if (memory[1][1]==1)`009`009livecells++;
- X`009if (memory[width][2]==1)`009livecells++;
- X`009if (memory[width][hight]==1)`009livecells++;
- X`009if (memory[1][2]==1)`009`009livecells++;
- X`009if (memory[width-1][hight]==1)`009livecells++;
- X`009if (memory[1][hight]==1)`009livecells++;
- X`009if (memory[1][2]==1)`009`009livecells++;
- X`009livecells=lifeloop(livecells);
- X
- X`009/* lower left corner */
- X`009x=1; y=hight;
- X`009if (memory[width][hight]==1)`009livecells++;
- X `009if (memory[2][hight]==1)`009livecells++;
- X `009if (memory[1][1]==1)`009`009livecells++;
- X `009if (memory[1][hight-1]==1)`009livecells++;
- X `009if (memory[2][1]==1)`009`009livecells++;
- X `009if (memory[width][hight-1]==1)`009livecells++;
- X `009if (memory[2][hight-1]==1)`009livecells++;
- X `009if (memory[width][1]==1)`009livecells++;
- X`009livecells=lifeloop(livecells);
- X
- X`009/* lower right corner */
- X`009x=width; y=hight;
- X`009if (memory[width-1][hight]==1)`009livecells++;
- X `009if (memory[1][hight]==1)`009livecells++;
- X `009if (memory[width][1]==1)`009livecells++;
- X `009if (memory[width][hight-1]==1)`009livecells++;
- X `009if (memory[1][1]==1)`009`009livecells++;
- X `009if (memory[width-1][hight-1]==1) livecells++;
- X `009if (memory[1][hight-1]==1)`009livecells++;
- X `009if (memory[width-1][1]==1)`009livecells++;
- X`009livecells=lifeloop(livecells);
- X
- X`009/* 1st column */
- X`009x=1;
- X`009for (y=2; y<hight-1; y++) `123
- X`009`009if (memory[width][y]==1) `009livecells++;
- X`009 `009if (memory[2][y]==1)`009`009livecells++;
- X `009`009if (memory[1][y+1]==1)`009`009livecells++;
- X `009`009if (memory[1][y-1]==1)`009`009livecells++;
- X `009`009if (memory[2][y+1]==1)`009`009livecells++;
- X `009`009if (memory[width][y-1]==1) `009livecells++;
- X `009`009if (memory[2][y-1]==1)`009`009livecells++;
- X `009`009if (memory[width][y+1]==1) `009livecells++;
- X`009`009livecells=lifeloop(livecells);
- X`009`125
- X
- X`009/* last column */
- X`009x=width;
- X`009for (y=2; y<hight; y++) `123`009
- X `009`009if (memory[width-1][y]==1)`009livecells++;
- X `009`009if (memory[1][y]==1)`009`009livecells++;
- X `009`009if (memory[width][y+1]==1)`009livecells++;
- X `009`009if (memory[width][y-1]==1)`009livecells++;
- X `009`009if (memory[1][y+1]==1)`009`009livecells++;
- X `009`009if (memory[width-1][y-1]==1)`009livecells++;
- X `009`009if (memory[1][y-1]==1)`009`009livecells++;
- X `009`009if (memory[width-1][y+1]==1)`009livecells++;
- X`009`009livecells=lifeloop(livecells);
- X`009`125
- X
- X`009/* top row */
- X`009y=1;
- X`009for (x=2; x<width; x++) `123`009
- X `009`009if (memory[x-1][1]==1)`009`009livecells++;
- X `009`009if (memory[x+1][1]==1)`009`009livecells++;
- X `009`009if (memory[x][2]==1)`009`009livecells++;
- X `009`009if (memory[x][hight]==1)`009livecells++;
- X `009`009if (memory[x+1][2]==1)`009`009livecells++;
- X `009`009if (memory[x-1][hight]==1)`009livecells++;
- X `009`009if (memory[x-1][2]==1)`009`009livecells++;
- X `009`009if (memory[x+1][hight]==1)`009livecells++;
- X`009`009livecells=lifeloop(livecells);
- X`009`125
- X
- X`009/* bottom row */
- X`009y=hight;
- X`009for (x=2; x<width; x++) `123
- X`009 `009if (memory[x-1][hight]==1)`009livecells++;
- X `009`009if (memory[x+1][hight]==1)`009livecells++;
- X `009`009if (memory[x][1]==1)`009`009livecells++;
- X `009`009if (memory[x][hight-1]==1)`009livecells++;
- X `009`009if (memory[x+1][1]==1)`009`009livecells++;
- X `009`009if (memory[x-1][hight-1]==1)`009livecells++;
- X `009`009if (memory[x-1][1]==1)`009`009livecells++;
- X `009`009if (memory[x+1][hight-1]==1)`009livecells++;
- X`009`009livecells=lifeloop(livecells);
- X`009`125
- X
- X`009cells_alive=0;
- X`009for (y=1; y<hight+1; y++) for (x=1; x<width+1; x++) `123
- X`009`009if (screen[x][y]==0) memory[x][y]=0;
- X`009`009else `123 memory[x][y]=1; cells_alive=1; `125
- X`009`125
- X`125
- X
- Xlifeloop(cells)
- Xint cells;
- X`123
- X`009if (memory[x][y]==1) `123
- X`009 if ((cells != 2) & (cells != 3)) `123
- X`009`009printf("%c[%d;%df ",esc,y,x);
- X`009`009screen[x][y]=0;
- X`009 `125
- X`009`125
- X`009else if (cells == 3) `123
- X`009`009printf("%c[%d;%dfo",esc,y,x);
- X`009`009screen[x][y]=1;
- X`009`125
- X`009return(0);
- X`125
- X
- $ GOSUB UNPACK_FILE
-
- $ FILE_IS = "LIFE.WORK"
- $ CHECKSUM_IS = 2097630274
- $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
- X
- X
- X
- X Screen Direction xy Orientation Margins
- XCell ------------- `032
- VEvaluating `1245 1 6`124 516 y- 1
- X b=hight
- VPositions: `124 `124 4c2 x- x+ 1 r
- X r=width
- X `1244 0 2`124 837 y+ b
- X `124 `124
- X `1248 3 7`124 c=cell
- X ------------- `032
- XNine cases `032
- X==========
- X`0091`009`0092`009`0093`009`0094`009`0095`009`0096`009`0097`009`0098
- V0 :(std)[x][y-1] `009[x+1][y]`009[x][y+1]`009[x-1][y]`009[x-1][y-1]`009[x+1][
- Xy-1]`009[x+1][y+1]`009[x-1][y+1]
- X
- V1 :`009[x][b]`009`009std`009`009std`009`009std`009`009[x-1][b]`009[x+1][b]`00
- X9std`009`009std `032
- V2 :`009std`009`009[1][y]`009`009std`009`009std`009`009std`009`009[1][y-1]`009
- X[1][y+1]`009std `032
- V3 :`009std`009`009std`009`009[x][1]`009`009std`009`009std`009`009std`009`009[
- Xx+1][1]`009[x-1][1]
- V4 :`009std`009`009std`009`009std`009`009[r][y]`009`009[r][y-1]`009std`009`009
- Xstd`009`009[r][y+1]
- X
- V5 :`009[x][b]`009`009std`009`009std`009`009[r][y]`009`009[r][b]`009`009[x+1][
- Xb]`009std`009`009[r][y+1]
- V6 :`009[x][b]`009`009[1][y]`009`009std`009`009std`009`009[x-1][b]`009[1][b]`0
- X09`009[1][y+1]`009std `032
- V7 :`009std`009`009[1][y]`009`009[x][1]`009`009std`009`009std`009`009[1][y-1]`
- X009[1][1]`009`009[x-1][1]
- V8 :`009std`009`009std`009`009[x][1]`009`009[r][y]`009`009[r][y-1]`009std`009`
- X009[x+1][1]`009[r][1]
- X
- X1 `009`0095`0091`0096
- X2 to end-1 `0094`0090`0092
- Xend`009`0098`0093`0097
- X
- $ GOSUB UNPACK_FILE
-
- $ FILE_IS = "PATTERNS.LIS"
- $ CHECKSUM_IS = 1647119441
- $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
- X
- Xoo ooo o oo o o o o oo o ooo o
- X o o o oo o o o o o oo ooo o o o
- X o o ooo o o o o o o o o o oo o o oo ooo
- Xo o o o oooo ooo ooo
- X o o o o
- X oo o o
- X o
- V-----------------------------------------------------------------------------
- X-
- X
- Xoo oo ooo ooooo oooooo
- X ooooo ooo o o o o
- X oo oo o o o o
- X oo oo o o o o o o`032
- X ooo o o o o oo `032
- X ooo `032
- X
- X
- X
- $ GOSUB UNPACK_FILE
-
- $ FILE_IS = "SPARE_LIFE.C"
- $ CHECKSUM_IS = 54598399
- $ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
- X/*`009`009`009GAME OF LIFE
- X`009`009`009VAX C VERSION
- X`009`009`009BY MARK RANDALL
- X*/
- X
- X#include stdio
- X#include ctype
- X#define width 80
- X#define hight 40
- X#define esc '\33'
- X
- Xint `009screen[width+1][hight+1];
- Xint `009memory[width+1][hight+1];
- Xint `009coord[8][2];
- Xint `009cells_alive;
- Xint `009x,y;
- Xint highcells;
- V/* ------------------------------------------------------------------------ *
- X/
- X
- Xmain()
- X`123
- X`009int charin;
- X`009int generation;
- X`009for ( ; ; ) `123
- X`009 generation=0; cells_alive=1;
- X`009 drawscreen();
- X`009 input();
- X`009 post_input();
- X
- X`009 while (cells_alive != 0) `123
- X`009 `009printf("%c[%d;1fGeneration #%d", esc, hight+2, generation++);
- X`009 `009life();
- X
- X`009`009if (cells_alive==0) `123
- X`009`009 printf("%c[%d;1f Last generation. ",esc,hight+3);
- X`009`009 printf("<<Enter>> to continue, E to end :");
- X`009`009 charin=getcha();
- X`009`009 if (charin>90) charin -= 32;
- X`009`009 if (charin==69) `123 printf("%c[2J%c[;f",esc,esc); exit(); `125
- X`009`009`125
- X`009 `125
- X`009`125
- X`125
- X
- Xdrawscreen()
- X`123
- Xchar incstr[width];
- X`009for (y=1; y<hight+1; y++) `123
- X`009 for (x=1; x<width+1; x++)
- X`009`009screen[x][y]=memory[x][y]=0;
- X`009`125
- X`009printf ("%c[2J%c[H",esc,esc);`009/* clear screen */
- X`009for(x=0;x<width;x++) strcat(incstr,".");
- X`009for(x=0;x<hight;x++) printf("%s\n",incstr);
- X`009for(x=0;x<width;x++) incstr[x] = '\0';
- X`009for(x=0;x<width;x++) strcat(incstr,"-");
- X`009printf("%s\n",incstr);
- X`125
- X
- Xinput()
- X`123
- X`009int charin;
- X`009printf("%c[%d;f",esc,hight+2);
- X`009printf("Use cursor keys or numeric keypad to move cursor.\n");
- X`009printf("Use period or 5 key to place/remove cell,");
- X`009printf(" zero or Enter to begin processing.");
- X`009x=1; y=1;`009`009/* upper left position */
- X`009printf("%c[1;1f",esc); /* put the cursor there */
- X for ( ; ; ) `123`009`009/* infinite loop */
- X`009charin=getcha();`009/* get ascii code from getcha */
- X`009if (charin==27) `123`009/* if char=esc, */
- X`009 charin=getcha();`009/* get the bracket */
- X`009 charin=getcha();`009/* then get the wanted char */
- X`009`125
- X`009switch(charin) `123`009/* move cursor, change index, flip dot */
- X`009 case 65:
- X`009 case 56:`009if (y!=1) `123 printf("%c[A",esc); y--; `125 break;
- X`009 case 66:
- X`009 case 50:`009if (y!=hight) `123 printf("%c[B",esc); y++; `125 break;
- X`009 case 67:
- X`009 case 54:`009if (x!=width) `123 printf("%c[C",esc); x++; `125 break;
- X`009 case 68:
- X`009 case 52:`009if (x!=1) `123 printf("%c[D",esc); x--; `125 break;
- X`009 case 55:`009if ((y!=1) & (x!=1)) `123
- X`009`009`009 printf("%c[A%c[D",esc,esc); y--; x--; `125 break;
- X`009 case 51:`009if ((y!=hight) & (x!=width)) `123
- X`009`009`009 printf("%c[B%c[C",esc,esc); y++; x++; `125 break;
- X`009 case 49:`009if ((x!=1) & (y!=hight)) `123
- X`009`009`009 printf("%c[B%c[D",esc,esc); y++; x--; `125 break;
- X`009 case 57:`009if ((y!=1) & (x!=width)) `123
- X`009`009`009 printf("%c[A%c[C",esc,esc); y--; x++; `125 break;
- X`009 case 46:
- X`009 case 53:`009changedot(); break; /* period = switch dot */
- X`009 case 48:
- X`009 case 13:`009return; /* zero = end */
- X`009`125
- X `125
- X`125
- X
- Xchangedot()
- X`123
- X`009if (screen[x][y]==1) `123`032
- X`009 screen[x][y]=0;
- X`009 printf(".%c[D",esc);
- X`009`125
- X`009else `123
- X`009 screen[x][y]=1;
- X`009 printf("o%c[D",esc);
- X`009`125
- X`125
- X
- Xpost_input()
- X`123
- X`009char incstr[width];
- X`009for(x=0;x<width;x++) incstr[x] = '\0';
- X`009printf("%c[1;1f",esc);
- X`009for (y=1; y<hight+1; y++) `123
- X`009 for (x=1; x<width+1; x++) `123
- X`009`009if (screen[x][y]==1) strcat(incstr,"o");
- X`009`009else strcat(incstr," ");
- X`009 `125
- X`009 printf("%s\n",incstr);
- X`009 for(x=0;x<width;x++) incstr[x] = '\0';
- X`009`125
- X`009printf("%c[%d;f",esc,hight+2);
- X`009for(x=0;x<width;x++) incstr[x] = '\0';
- X`009for(x=0;x<width;x++) strcat(incstr," ");
- X`009printf("%s\n",incstr);
- X`009printf("%s\n",incstr);
- X`125
- X
- X/****************************/
- X
- Xlife()
- X`123
- X`009/* see file life.work (132 cols) for meanings of positions
- X`009 and "std". */
- X
- X`009int i;
- X`009for (y=1; y<hight+1; y++) `123
- X`009 switch(y) `123
- X`009 case 1: `123
- X`009`009setstd(1,y);
- X`009`009coord[1][2]=hight;
- X`009`009coord[4][1]=width;
- X`009`009coord[5][1]=width;
- X`009`009coord[5][2]=hight;
- X`009`009coord[6][2]=hight;
- X`009`009coord[8][1]=width;
- X`009`009countcells(1,y);`009`009/* position 5 */
- X`009`009for (x=2; x<width; x++) `123
- X`009`009 setstd(x,y);
- X`009`009 coord[1][2]=hight;
- X`009`009 coord[5][2]=hight;
- X`009`009 coord[6][2]=hight;
- X`009`009 countcells(x,y);`009`009/* position 1 */
- X`009`009`125
- X`009`009setstd(width,y);
- X`009`009coord[1][1]=hight;
- X`009`009coord[2][1]=1;
- X`009`009coord[5][2]=hight;
- X`009`009coord[6][1]=1;
- X`009`009coord[6][2]=hight;
- X`009`009coord[7][1]=1;
- X`009`009countcells(width,y);`009`009/* position 6 */
- X`009`009break;
- X`009 `125
- X`009 case hight: `123
- X`009`009setstd(1,y);
- X`009`009coord[3][2]=1;
- X`009`009coord[4][1]=width;
- X`009`009coord[5][1]=width;
- X`009`009coord[7][2]=1;
- X`009`009coord[8][1]=width;
- X`009`009coord[8][2]=1;
- X`009`009countcells(1,y);`009`009/* position 8 */
- X`009`009for (i=1; i<width; i++) `123
- X`009`009 setstd(x,y);
- X`009`009 coord[3][2]=1;
- X`009`009 coord[7][2]=1;
- X`009`009 coord[8][2]=1;
- X`009`009 countcells(x,y);`009`009/* position 3 */
- X`009`009`125
- X`009`009setstd(width,y);
- X`009`009coord[2][1]=1;
- X`009`009coord[3][2]=1;
- X`009`009coord[6][1]=1;
- X`009`009coord[7][1]=1;
- X`009`009coord[7][2]=1;
- X`009`009coord[8][2]=1;
- X`009`009countcells(width,y);`009`009/* position 7 */
- X`009`009break;
- X`009 `125
- X`009 default: `123
- X`009`009setstd(1,y);
- X`009`009coord[4][1]=width;
- X`009`009coord[5][1]=width;
- X`009`009coord[8][1]=width;
- X`009`009countcells(1,y);`009`009/* position 4 */
- X`009`009for (i=1; i<width; i++) `123
- X`009`009 setstd(x,y);
- X`009`009 countcells(x,y);`009`009/* position 0 (std) */
- X`009`009`125
- X`009`009setstd(width,y);
- X`009`009coord[2][1]=1;
- X`009`009coord[6][1]=1;
- X`009`009coord[7][1]=1;
- X`009`009countcells(width,y);`009`009/* position 2 */
- X`009 `125
- X`009 `125
- X`009`125
- X`009for (x=1; x<width+1; x++) for (y=1; y<hight; y++)`032
- X`009`009memory[x][y]=screen[x][y];
- X`009printf("%c[%d;1f %d",esc,hight+4,highcells);
- X`125
- X
- Xsetstd(a,b)
- Xint a,b;
- X`123
- X`009/* coord[n][1] will be x, coord[n][2] will be y. These will be
- X`009 plugged into memory[][] in next procedure */
- X
- X`009coord[1][1]=a;
- X`009coord[1][2]=b-1;
- X`009coord[2][1]=a+1;
- X`009coord[2][2]=b;
- X`009coord[3][1]=a;
- X`009coord[3][2]=b+1;
- X`009coord[4][1]=a-1;
- X`009coord[4][2]=b;
- X`009coord[5][1]=a-1;
- X`009coord[5][2]=b-1;
- X`009coord[6][1]=a+1;
- X`009coord[6][2]=b-1;
- X`009coord[7][1]=a+1;
- X`009coord[7][2]=b+1;
- X`009coord[8][1]=a-1;
- X`009coord[8][2]=b+1;
- X`009return;
- X`125`009`009
- X
- Xcountcells(a,b)
- Xint a,b;`009/* real-time x,y */
- X`123
- X`009int i,cells=0;
- X`009`009`009 /* memory[ x ][ y ] */
- X`009for (i=1; i<9; i++) if (memory[coord[i][1]][coord[i][2]]==1) cells++;
- X`009highcells = highcells + cells;
- X
- X`009if (memory[a][b]==1) `123
- X`009 cells_alive=1;
- X`009 if ((cells != 2) & (cells != 3)) `123
- X`009`009printf("%c[%d;%df ",esc,b,a);
- X`009`009screen[a][b]=0;
- X`009 `125
- X`009`125
- X`009else if (cells == 3) `123
- X`009`009printf("%c[%d;%dfo",esc,b,a);
- X`009`009screen[a][b]=1;
- X`009`125
- X`009return;
- X`125
- $ GOSUB UNPACK_FILE
- $ EXIT
- -+-+-+-+-+ End of part 2 +-+-+-+-+-
-