home *** CD-ROM | disk | FTP | other *** search
- PROGRAM LIFE(INPUT,OUTPUT);
- (*LIFE FORM CREATION PROGRAM*)
- (*Code written by Joseph Velasco, August 23, 1987*)
- (*Purpose of this program is mainly to aquaint the beginner with Pascal
- Code.
- You may freely distribute and even alter this program at will,
- provided proper credit is given.
- Files: LIFE.PAS --> This program.
- LIFE.DOC --> Brief description and instructions.
- LIFE.EXE --> Compiled PASCAL program.*)
-
- CONST
- NUM = 15;
- TYPE
- RANGE = 0..NUM;
- ZO = 0..1;
- VAR
- LO,L1 : ARRAY[RANGE,RANGE] OF ZO;
- X,Y,R,S,TURN,NADJ : INTEGER;
- SURV : BOOLEAN;
- ADJ : ZO;
- QUIT : BOOLEAN;
- Q : CHAR;
- PROCEDURE GOTOXY(X1,Y1:INTEGER);
- VAR SX,SY:INTEGER;
- BEGIN
- WRITELN(CHR(11));
- FOR SY:= 1 TO Y1 DO
- WRITELN(CHR(31));
- FOR SX := 1 TO X1 DO
- WRITELN(CHR(28));
- END;
- PROCEDURE HOME;
- VAR I : INTEGER;
- BEGIN
- FOR I := 1 TO 26 DO
- WRITELN;
- GOTOXY(0,2);
- END;
- PROCEDURE INITIALIZE;
- VAR DATAOK : BOOLEAN;
- BEGIN
- HOME;
- SURV := TRUE;
- TURN := 1;
- FOR Y := 1 TO NUM DO
- FOR X := 1 TO NUM DO
- BEGIN
- L1[X,Y] := 0;
- LO[X,Y] := 0;
- END;
- WRITELN(' **LIFE**');
- WRITELN(' THE GAME OF EVOLUTIONARY STUDY');
- WRITELN(' WILL YOUR ORGANISM FLURISH?');
- WRITELN;
- WRITE('NUMBER OF INITIAL CELLS IN ORGANISM? ');
- READLN(R);
- FOR S := 1 TO R DO
- BEGIN
- DATAOK := FALSE;
- REPEAT
- WRITE('PLEASE ENTER THE X <SPACE> Y COORDS. OF THE CELL ',S,': ');
- READLN(X,Y);
- DATAOK := ((Y>0) AND (Y<NUM)) AND ((X>0) AND (X<NUM));
- UNTIL DATAOK;
- LO[X,Y] := 1;
- END;
- HOME;
- GOTOXY(40,8);
- WRITELN('THE GREAT GAME: *LIFE*');
- END;
- PROCEDURE COMPUTE;
- BEGIN
- SURV := FALSE;
- FOR Y := 1 TO NUM DO
- FOR X := 1 TO NUM DO
- BEGIN
- NADJ := 0;
- FOR R:= -1 TO 1 DO
- FOR S := -1 TO 1 DO
- BEGIN
- IF (R<>0) OR (S<>0) THEN
- IF (X<>1) AND (X<>NUM) AND (Y<>1) AND (Y<>NUM) THEN
- NADJ := NADJ + LO[X+R,Y+S];
- END;
- IF NADJ = 3 THEN L1[X,Y] := 1
- ELSE IF NADJ <> 2 THEN L1[X,Y] := 0;
- IF NOT SURV THEN SURV := (L1[X,Y]=1);
- END;
- FOR Y := 1 TO NUM DO
- FOR X := 1 TO NUM DO
- LO[X,Y] := L1[X,Y];
- TURN := TURN + 1;
- END;
- PROCEDURE CONSOLE;
- BEGIN
- IF TURN > 8 THEN WRITELN('YOUR ORGANISM WAS STRONG, BUT ITS DEAD NOW.')
- ELSE CASE TURN OF
- 1,2 : WRITELN('LIFE FORM DEAD. STICK TO PLAYING WITH LEGO BLOCKS!');
- 3,4 : WRITELN('LIFE FORM DEAD. YOU HAVE ONLY YOURSELF TO BLAME.');
- 5 : WRITELN('YOU GAVE IT A GOOD SHOT, BUT TAPS IS ITS FINAL SONG.');
- 6,7,8 : WRITELN('YOUR CREATION LINGERED FOR QUITE SOME TIME BEFORE IT',
- ' KICKED THE BUCKET. GOOD SHOW.');
- END;(*OF CASE*)
- WRITELN('YOUR ORGANISM LASTED ',(TURN-1),' GENERATIONS.');
- WRITELN;
- END;
- PROCEDURE DISPLAY;
- BEGIN
- GOTOXY(0,2);
- FOR Y := 1 TO NUM DO
- BEGIN
- FOR X := 1 TO NUM DO
- IF LO[X,Y] = 1 THEN WRITE('0')
- ELSE WRITE('.');
- WRITELN;
- END;
- WRITELN;WRITELN;WRITELN('GENERATION ',TURN);
- END;
- BEGIN (*MAIN PROGRAM*)
- REPEAT
- INITIALIZE;
- WHILE SURV DO
- BEGIN
- DISPLAY;
- COMPUTE;
- END;
- CONSOLE;
- WRITE('TRY AGAIN? ');
- READ(Q);
- QUIT := (Q='N') OR (Q='n');
- UNTIL QUIT;
- END. (*MAIN PROGRAM*)