home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-07-01 | 28.6 KB | 1,052 lines |
- Path: uunet!caen!kuhub.cc.ukans.edu!nrlvx1.nrl.navy.mil!koffley
- Newsgroups: vmsnet.sources.games
- Subject: TETRIS_VMS.03_OF_05
- Message-ID: <1992Jul2.123936.744@nrlvx1.nrl.navy.mil>
- From: koffley@nrlvx1.nrl.navy.mil
- Date: 2 Jul 92 12:39:36 -0400
- Organization: NRL SPACE SYSTEMS DIVISION
- Lines: 1042
-
- -+-+-+-+-+-+-+-+ START OF PART 3 -+-+-+-+-+-+-+-+
- XX
- XXif choice <> '@' then
- XXbegin
- XX highscores(score,level,Htable,scores,gotin);
- XX if gotin then viewscores(Htable,scores,key,chan)
- XXend
- XXend;
- XV`7B************************************************************************
- V*****
- XX*`7D
- XV`7B************************************************************************
- V*****
- XX*`7D
- XX
- XV`7B************************************************************************
- V*****
- XX*`7D
- XV`7B************************************************************************
- V*****
- XX*`7D
- XXProcedure RESTORE;
- XX
- XXvar
- XX I:integer;
- XX
- XXbegin
- XX cls;
- XX writeln(' Restore saved game option');
- XX usernum(userid);
- XX if (userid = 'CADP02 ') or
- XX (userid = 'CADP03 ') then`20
- XX begin
- XX write('Enter username, MAX 8 letters, RETURN for default: ');
- XX userid:=' ';
- XX readln(userid);
- XX if userid`5B1`5D = ' ' then usernum(userid);
- XX end;
- XX restored:=false;
- XX open(Save,Savefile,history:=readonly);
- XX reset(save);
- XX for I:=1 to 100 do
- XX begin
- XX read(save,peeps`5BI`5D);
- XX if peeps`5BI`5D.user = userid then
- XX begin
- XX cls;
- XX writeln('Restoring...');
- XX lines:=peeps`5BI`5D.lines;
- XX position:=peeps`5BI`5D.position;
- XX x:=peeps`5BI`5D.x;
- XX y:=peeps`5BI`5D.y;
- XX shape:=peeps`5BI`5D.shape;
- XX screen:=peeps`5BI`5D.outp;
- XX score:=peeps`5BI`5D.num;
- XX level:=peeps`5BI`5D.level;
- XX peeps`5BI`5D.user:='UNUSED ';
- XX restored:=true;
- XX end;
- XX end;
- XX close(save);
- XX open(save,savefile,history:=old);
- XX rewrite(save);
- XX for I:=1 to 100 do
- XX write(save,peeps`5BI`5D);
- XX close(save);
- XX if restored = true then
- XX begin
- XX writeln('Restored.');
- XX writeln('Press any key for main screen');
- XX waitkey(key,chan);
- XX MAINGAME(left,right,rotleft,rotright,speed,quitkey,redraw,level,cheat);
- XX end
- XX else
- XX begin
- XX writeln('Data file not found.');
- XX writeln('Press any key to return to main menu.');
- XX waitkey(key,chan);
- XX end;
- XXend;
- XX
- XV`7B************************************************************************
- V*****
- XX*`7D
- XV`7B************************************************************************
- V*****
- XX*`7D
- XX
- XX`7B*******************************************************************`7D
- XXbegin `7BSHAPES`7D
- XX cls;
- XX MAKECHAN(chan);
- XX HP := FALSE;
- XX flag:=true;
- XX flag2:=false;
- XX cheat:=false;
- XX left:='z';right:='x';rotleft:='o';rotright:='p';speed:='`5B';quitkey:='q'
- V;
- XX factor:=0.15;
- XX redraw:='r';
- XX levelmin:=1;
- XX for I:=1 to 22 do
- XX begin `7Bfor`7D
- XX for J:=1 to 10 do
- XX screen`5BI,J`5D:=0;
- XX end; `7Bfor`7D
- XX repeat
- XX MENUPRINT;
- XX repeat
- XX if chr(key) = 'c' then flagA:=true;
- XX if chr(key) = 'a' then
- XX begin
- XX if flagA = true then flagB:=true
- XX else flagB:=false;
- XX end;
- XX if chr(key) = 'd' then
- XX begin
- XX if flagB = true then flagC:=true
- XX else flagC:=false;
- XX end;
- XX if chr(key) = 'p' then
- XX begin
- XX if flagC = true then flagD:=true
- XX else flagD:=false;
- XX end;
- XX if (chr(key) <> 'c') and (chr(key) <> 'a') and
- XX (chr(key) <> 'd') and (chr(key) <> 'p') then
- XX begin
- XX flagA:=false;
- XX flagB:=false;
- XX flagC:=false;
- XX flagD:=false;
- XX end;
- XX waitkey(key,chan);
- XX until chr(key) in `5B'0'..'8'`5D;`20
- XX level:=levelmin;
- XX if chr(key) <> '8' then flagD:=false;
- XX if chr(key)='1' then
- XX MAINGAME(left,right,rotleft,rotright,speed,quitkey,redraw,level,cheat
- V);
- XV if chr(key)='2' then KEYDEFINE(left,right,rotleft,rotright,speed,quitke
- Vy,r
- XXedraw);
- XX if chr(key)='3' then VIEWSCORES(Htable,scores,key,chan);
- XX if chr(key)='4' then INSTRUCTIONS;
- XX if chr(key)='5' then flag:=not(flag);
- XX if chr(key)='6' then flag2:=not(flag2);
- XX if chr(key)='7' then RESTORE;
- XX if flagD then
- XX begin
- XX cheat:=true;
- XX write('level??: ');
- XX readln(levelmin);
- XX write('reset savefile??: ');
- XX readln(answer);
- XX if (answer = 'y') or (answer = 'Y') then
- XX begin
- XX blank.user:='UNUSED ';
- XX open(Save,Savefile,history:=unknown);
- XX rewrite(save);
- XX for I:=1 to 100 do
- XX write(save,blank);
- XX close(save);
- XX end;
- XX write('reset scoreboard??: ');
- XX readln(answer);
- XX if (answer='y') or (answer ='Y') then
- XX begin
- XX open (Htable , Htablefile ,
- XX`60009 history := unknown);
- XX rewrite(Htable);
- XX for A:= 1 to 10 do
- XX begin
- XX scores`5BA`5D.num:=0;
- XX scores`5BA`5D.name:=' ';
- XX scores`5BA`5D.level:=1;
- XX scores`5BA`5D.id:=' ';
- XX end;
- XX for A:=1 to 10 do
- XX write(Htable,scores`5BA`5D);
- XX close(Htable);
- XX end;
- XX end;
- XX until (chr(key)='0');
- XX cls;
- XX writeln('There now, that didn''t hurt much did it??');
- XX writeln('Byeeeeeeeeee........');
- XXend. `7BSHAPES`7D
- XX`7B*******************************************************************`7D
- XX
- X$GoSub Convert_File
- X$Exit
- $ CALL UNPACK TETRIS_BUILD.COM;1 728168150
- $ create 'f'
- Xprogram Shapes(input,output,Htable,Save);
- X
- X
- X`7B*************************************************************************
- V******
- X Copyright 1989,1990 by Colin Cowie, Glasgow, Scotland.
- X
- X All Rights Reserved
- X
- X Permission to use, copy, modify, and distribute this software and its`20
- X documentation for any purpose and without fee is hereby granted,`20
- X provided that the above copyright notice appear in all copies and that
- X both that copyright notice and this permission notice appear in`20
- X supporting documentation.
- X****************************************************************************
- V***`7D
- X
- X
- X
- Xconst
- X Htablefile='my$root:`5Brcd.tetris`5DHtable.dat';
- X Savefile='my$root:`5Brcd.tetris`5Dsave.dat';
- X
- Xtype
- X string = packed array`5B1..8`5D of char;
- X scorerec = record
- X num:integer;
- X name:packed array`5B1..40`5D of char;
- X level:integer;
- X id:string;
- X end;
- X recfile = file of scorerec;
- X scorearray = array`5B1..10`5D of scorerec;
- X screenarray = array`5B1..22,1..10`5D of integer;
- X timearray = packed array`5B1..11`5D of char;
- X datestr = packed array `5B1..11`5D of char;
- X saverec = record
- X num:integer;
- X level:integer;
- X outp:screenarray;
- X x:integer;
- X y:integer;
- X shape:integer;
- X position:integer;
- X lines:integer;
- X user:string;
- X current:datestr;
- X end;
- X saverecfile = file of saverec;
- X savearray = array`5B1..100`5D of saverec;
- X
- Xvar
- X restored:boolean;
- X blank:saverec;
- X peeps:savearray;
- X HP:boolean;
- X factor:real;
- X curr:timearray;
- X flag,
- X flag2:boolean;
- X answer:char;
- X del:boolean;
- X userid:string;
- X flagA,
- X flagB,
- X flagC,
- X flagD:boolean;
- X chan:integer;
- X key:integer;
- X xchrhigh,
- X xchrlow,
- X ychrhigh,
- X ychrlow:char;
- X score,
- X shape,
- X position:integer;
- X cheat:boolean;
- X currd:datestr;
- X I,J,A:integer;
- X x,y:integer;
- X scores:scorearray;
- X OTT:boolean;
- X Htable:recfile;
- X Save,
- X Saver:saverecfile;
- X level:integer;
- X levelmin:integer;
- X screen:screenarray;
- X left,
- X right,
- X rotleft,
- X rotright,
- X speed,
- X redraw,
- X quitkey:char;
- X lines:integer;
- X
- X`7B*****************************************************************`7D
- Xprocedure CLS;
- Xbegin `7BCLS`7D
- Xwrite(chr(27),'`5BH');
- Xwriteln(chr(27),'`5B2J');
- Xend; `7BCLS`7D
- X`7B*****************************************************************`7D
- X
- X`7B*****************************************************************`7D
- X`7B*************************************************************************
- V****`7D
- Xprocedure makechan(%REF chan:integer);external;
- X
- Xprocedure readkey(%REF key,chan:integer);external;
- X
- Xprocedure waitkey(%REF key,chan:integer);external;
- X
- Xprocedure waitx(%REF factor:real);external;
- X
- Xprocedure spawn;external;
- X
- Xprocedure RANDOMISE;fortran;
- X
- Xfunction RANDOM(min,max:integer):integer;fortran;
- X
- Xprocedure USERNUM(%stdescr userid:string);fortran;
- X`7B*****************************************************************`7D
- X
- X
- X`7B******************************************************************`7D
- Xprocedure highscores(score:integer; bit:integer; var Htable:recfile;
- X var scores:scorearray; var gotin:boolean);
- X
- X
- Xvar
- X I,J:integer;
- X newscore:scorerec;
- X A:integer;
- X two:boolean;
- X
- Xbegin
- X gotin:=false;
- X cls;
- X writeln('You scored: ',score,' points!!');
- X I:=1;
- X open (Htable, Htablefile,
- X history:=readonly);
- X reset(Htable);
- X while (not eof(Htable)) and (I <=10) do
- X begin
- X read(Htable,scores`5BI`5D);
- X I:=I+1;
- X end;
- X close(Htable);
- X for A:= I to 10 do
- X begin
- X scores`5BA`5D.num:=0;
- X scores`5BA`5D.name:=' ';
- X scores`5BA`5D.level:=1;
- X scores`5BA`5D.id:=' ';
- X end;
- X if score > scores`5B10`5D.num then
- X begin
- X two := true;
- X usernum(userid);
- X if (userid='CADP03 ') or
- X (userid='CADP02 ') or
- X (userid='CRAA30 ') or
- X (userid='CRAA38 ') then
- X begin
- X writeln('Enter usernum, maximum 8 chars (RETURN for default):');
- X write(':');
- X userid:=' ';
- X readln(userid);
- X if userid`5B1`5D=' ' then usernum(userid);
- X end;
- X
- X for I := 10 downto 1 do
- X begin
- X if userid = scores`5BI`5D.id then
- X begin`20
- X if score > scores`5BI`5D.num then
- X begin
- X for J := I to 9 do
- X scores`5BJ`5D := scores`5BJ+1`5D;
- X if I = 9 then
- X scores`5B9`5D := scores`5B10`5D;
- X scores`5B10`5D.num:=0;
- X scores`5B10`5D.name:=' ';
- X scores`5B10`5D.level:=1;
- X scores`5B10`5D.id:=' ';
- X end
- X else
- X begin
- X two := false;
- X end;
- X end;
- X end;
- X if two = true then
- X begin
- X gotin:=true;
- X writeln('Well done, yu have made it into the top ten!!');
- X for A:=1 to 20 do
- X newscore.name`5BA`5D:=' ';
- X Writeln('Enter name, maximum 40 chars:');
- X write(':');
- X readln(newscore.name);
- X usernum(userid);
- X if (userid='CADP03 ') or`20
- X (userid='CADP02 ') or`20
- X (userid='CRAA30 ') or
- X (userid='CHBS08 ') then
- X begin
- X writeln('Enter usernum, maximum 8 chars (RETURN for default):');
- X write(':');
- X userid:=' ';
- X readln(userid);
- X if userid`5B1`5D=' ' then usernum(userid);
- X end;
- X newscore.num:=score;
- X newscore.level:=bit;
- X newscore.id:=userid;
- X I:=1;
- X while newscore.num < scores`5BI`5D.num do
- X I:=I+1;
- X for A:=10 downto I+1 do
- X scores`5BA`5D:=scores`5BA-1`5D; `20
- X scores`5BI`5D:=newscore;
- X open (Htable , Htablefile ,
- X `09history := old);
- X rewrite(Htable);
- X for I:=1 to 10 do
- X write(Htable,scores`5BI`5D);
- X close (Htable);
- X writeln('Press any key to view high-score table');
- X end
- X else
- X begin
- X writeln('One entry only per usernum in the high score table!!');
- X writeln('Press any key to return to main menu');
- X end;
- X end
- X else
- X begin
- X writeln('Sorry, yu didnt make the high score table!!!!!!');
- X writeln('Press any key to return to main menu');
- X end;
- X waitkey(key,chan);
- Xend;
- X`7B*************************************************************`7D
- X
- X
- X`7B*************************************************************`7D
- Xprocedure viewscores(var Htable:recfile; scores:scorearray; key,chan:integer
- V);
- X
- Xvar
- X score:scorerec;
- X I,
- X A:integer;
- X
- Xbegin
- X cls;
- X open (Htable, Htablefile,
- X history:=readonly);
- X reset(Htable);
- X I:=1;
- X while (not eof(Htable)) and (I <=10) do`20
- X begin
- X read(Htable,score);
- X scores`5BI`5D:=score;
- X I:=I+1;
- X end;
- X close (Htable);
- X for A:= I to 10 do
- X begin
- X scores`5BI`5D.num:=0;
- X scores`5BI`5D.name:=' ';
- X scores`5BI`5D.level:=1;
- X scores`5BI`5D.id:=' ';
- X end;
- X Writeln(' Shapes HIGH SCORE TABLE');
- X writeln;writeln;
- X writeln(' score name level
- V userid');
- X for I:=1 to 10 do
- X begin
- X writeln(I:2,'. ',scores`5BI`5D.num,' ',scores`5BI`5D.name,' ',
- X scores`5BI`5D.level:2,' ',scores`5BI`5D.id);
- X end;
- Xwriteln;writeln;
- Xwriteln(' Press any key to return to main menu');
- Xwaitkey(key,chan);
- Xend;
- X
- X`7B***********************************************************`7D
- X
- X
- X`7B************************************************************`7D
- Xprocedure INTOCHAR(var xchrhigh,xchrlow,
- X ychrhigh,ychrlow:char; x,y:integer);
- X
- Xbegin `7BINTOCHAR`7D
- X xchrhigh`09:= chr(ord('0') + x div 10) ;
- X xchrlow`09:= chr(ord('0') + x mod 10) ;
- X
- X ychrhigh`09:= chr(ord('0') + y div 10) ;
- X ychrlow`09:= chr(ord('0') + y mod 10) ;
- X
- Xend; `7BINTOCHAR`7D
- X`7B*********************************************************************`7D
- X
- X
- X`7B*****************************************************************`7D
- Xprocedure MENUPRINT;
- X
- Xbegin
- X CLS;
- X writeln(chr(27),'#3 Shapes');
- X writeln(chr(27),'#4 Shapes');
- X writeln(chr(27),'`5B22;25HCopyright 1989,1990 LokiSoft Ltd.');
- X writeln(chr(27),'`5B09;31H1. Play Shapes');
- X writeln(chr(27),'`5B10;31H2. Redefine Keys');
- X writeln(chr(27),'`5B11;31H3. View Score Board');
- X writeln(chr(27),'`5B12;31H4. Instructions');
- X write(chr(27),'`5B13;31H5. Print Next Shape');
- X if flag then writeln(' (YES)') else writeln(' (NO) ');
- X write(chr(27),'`5B14;31H6. Slow Down Game');
- X if flag2 then writeln(' (YES)') else writeln(' (NO) ');
- X writeln(chr(27),'`5B15;31H7. Restore Saved Game');
- X writeln(chr(27),'`5B17;31H0. Exit from game');
- X writeln(chr(27),'`5B19;31HEnter choice from options above');
- X writeln;
- Xend;
- X`7B**********************************************************************`7D
- X`7B*****************************`7D
- Xprocedure Instructions;
- Xbegin
- Xcls;
- Xwriteln('Hi Guys, here''s another offering from the LokiSoft label,');
- Xwriteln('except this one''s good!!!!');
- Xwriteln;
- Xwriteln('This game is based on a certain arcade game which you may have ');
- Xwriteln('played at sometime or other, but I aint mentioning which one cos');
- Xwriteln('this is a blatant rip-off of it so its really dead obvious!!');
- Xwriteln;
- Xwriteln('Anyway, its like this: there are these seven different shapes:-');
- Xwriteln;
- Xwriteln('@@ @ @ @ @ @ @');
- Xwriteln('@@ @ @ @@ @@ @@ @');
- Xwriteln(' @@ @@ @ @ @ @');
- Xwriteln(' @');
- Xwriteln('And these shapes fall from the top of the screen to the bottom,');
- Xwriteln('piling on top of one another.');
- Xwriteln('You can rotate each shape, and move it left or right, the ');
- Xwriteln('object being to get complete unbroken lines of "@@@@@@@@@@" at ');
- Xwriteln('the bottom of the screen.');
- Xwriteln('when this happens, that line is deleted, and the pile drops down');
- Xwriteln('and you are given points depending on which level you are on');
- Xwriteln;
- Xwriteln(' Press any key for next page');
- Xwaitkey(key,chan);
- Xcls;
- Xwriteln;
- Xwriteln('If you are fortunate enough to get more than one completed line at'
- V);
- Xwriteln('a time, you receive a bonus dependent on the level you are on and t
- Vhe');
- Xwriteln('number of lines completed.');
- Xwriteln('After completing 5 lines, you move on to level 2 where you have to'
- V);
- Xwriteln('complete 10 lines,..15 for level 3, and so on.');
- Xwriteln('There is a bonus at the end of each level depending on which level'
- V);
- Xwriteln('you are on, and how low the pile of bricks is,..the lower the pile,
- V');
- Xwriteln('the higher the bonus');
- Xwriteln('For each level, the number of points per completed line, and potent
- Vial');
- Xwriteln('bonus per level is increased, and there are an infinite number');
- Xwriteln('of levels in the game.');
- Xwriteln;
- Xwriteln('The default keys are: z - left, x - right,');
- Xwriteln(' o - rotate left, p - rotate right,');
- Xwriteln(' `5B - move shape to bottom, r - redraw screen, q - quit');
- Xwriteln(' ! - to spawn to dcl, @ - to save game');
- Xwriteln;
- Xwriteln(' Press any key for next page');
- Xwaitkey(key,chan);
- Xcls;
- Xwriteln('Note on Saving game:-');
- Xwriteln;
- Xwriteln('It is only possible for any user to have one saved game at a time,'
- V);
- Xwriteln('and if you attempt to save a game when you already have one stored,
- V');
- Xwriteln('the stored game will be written over!!!');
- Xwriteln('Stored games will automatically be deleted when restored.');
- Xwriteln;
- Xwriteln('There is total space on the save-file for 100 games, and when it is
- V');
- Xwriteln('full, whenever anyone attempts to save their game, the oldest previ
- Vous');
- Xwriteln('saved game is written over!');
- Xwriteln;
- Xwriteln('Note on Slowing down game option:-');
- Xwriteln;
- Xwriteln('This option is intended only for people using workstations or simil
- Var');
- Xwriteln('which vastly speed up the screen printing, thereby making the game'
- V);
- Xwriteln('unplayable. The slow down option negates this problem.');
- Xwriteln;
- Xwriteln('Now I''ll take this opportunity to wish you happy playing and good'
- V);
- Xwriteln('luck, you''ll need it!!!!');
- Xwriteln(chr(27),'`5B22;30HPress any key for main menu');
- Xwaitkey(key,chan);
- Xend;
- X`7B*****************************`7D
- X
- X
- X
- X`7B*******************************************************************`7D `2
- V0
- Xprocedure KEYDEFINE(var left,right,rotleft,rotright,speed,quitkey,redraw:cha
- Vr);
- X
- Xvar
- X
- X redrawint,
- X null,
- X leftint,
- X rightint,
- X rotleftint,
- X rotrightint,
- X speedint,
- X stopint:integer;
- X quitint:integer;
- X
- Xbegin `7BKEYDEFINE`7D
- X CLS;
- X writeln(' Defining Keys For SHAPES ');
- X writeln;
- X writeln;
- X writeln;
- X writeln;
- X writeln('Press key for movement LEFT: ');
- X waitkey(leftint,chan);
- X left:=chr(leftint);
- X writeln(left);
- X writeln('press key for movement RIGHT: ');
- X waitkey(rightint,chan);
- X while (rightint=leftint) do
- X waitkey(rightint,chan);
- X right:=chr(rightint);
- X writeln(right);
- X writeln('Press key for rotation ANTICLOCKWISE: ');
- X waitkey(rotleftint,chan);
- X while (rotleftint=leftint) or
- X (rotleftint=rightint) do
- X waitkey(rotleftint,chan);
- X rotleft:=chr(rotleftint);
- X writeln(rotleft);
- X writeln('press key for rotation CLOCKWISE: ');
- X waitkey(rotrightint,chan);
- X while (rotrightint=rightint) or
- X (rotrightint=rotleftint) or
- X (rotrightint=leftint) do
- X waitkey(rotrightint,chan);
- X rotright:=chr(rotrightint);
- X writeln(rotright);
- X writeln('press key to move shape to bottom: ');
- X waitkey(speedint,chan);
- X while (speedint=rightint) or`20
- X (speedint=leftint) or`20
- X (speedint=rotleftint) or
- X (speedint=rotrightint) do
- X waitkey(speedint,chan);
- X speed:=chr(speedint);
- X writeln(speed);
- X writeln('press key to quit game: ');
- X waitkey(quitint,chan);
- X while (quitint=rightint) or`20
- X (quitint=leftint) or`20
- X (quitint=rotleftint) or
- X (quitint=rotrightint) or
- X (quitint=speedint) do
- X waitkey(quitint,chan);
- X quitkey:=chr(quitint);
- X writeln(quitkey);
- X writeln('press key to redraw screen');
- X waitkey(redrawint,chan);
- X while (redrawint=rightint) or
- X (redrawint=leftint) or
- X (redrawint=rotrightint) or
- X (redrawint=rotleftint) or
- X (redrawint=quitint) do
- X waitkey(redrawint,chan);
- X redraw:=chr(redrawint);
- X writeln(redraw);
- X writeln;
- X writeln;
- X writeln;
- X writeln(' Press any key to continue ');
- X waitkey(null,chan);
- Xend; `7BKEYDEFINE`7D
- X`7B*******************************************************************`7D
- X
- X
- X
- X`7B***********************************************************************`7
- VD
- Xprocedure Shapestuff(shape,position,y,x:integer; var screen:screenarray;
- X n:integer);
- Xbegin
- X screen`5By,x`5D:=n;
- X if shape = 1 then
- X begin
- X screen`5By,x+1`5D:=n;
- X screen`5By+1,x`5D:=n;
- X screen`5By+1,x+1`5D:=n;
- X end
- X else
- X if shape = 2 then
- X begin
- X if position = 1 then
- X begin
- X screen`5By-1,x`5D:=n;
- X screen`5By+1,x`5D:=n;
- X screen`5By+1,x+1`5D:=n;
- X end
- X else
- X if position = 2 then
- X begin
- X screen`5By,x+1`5D:=n;
- X screen`5By,x-1`5D:=n;
- X screen`5By+1,x-1`5D:=n;
- X end
- X else
- X if position = 3 then
- X begin
- X screen`5By+1,x`5D:=n;
- X screen`5By-1,x`5D:=n;
- X screen`5By-1,x-1`5D:=n;
- X end
- X else
- X if position = 4 then
- X begin
- X screen`5By,x-1`5D:=n;
- X screen`5By,x+1`5D:=n;
- X screen`5By-1,x+1`5D:=n;
- X end;
- X end
- X else
- X if shape = 3 then
- X begin
- X if position = 1 then
- X begin
- X screen`5By-1,x`5D:=n;
- X screen`5By+1,x`5D:=n;
- X screen`5By+1,x-1`5D:=n;
- X end
- X else
- X if position = 2 then
- X begin
- X screen`5By,x+1`5D:=n;
- X screen`5By,x-1`5D:=n;
- X screen`5By-1,x-1`5D:=n;
- X end
- X else
- X if position = 3 then
- X begin
- X screen`5By-1,x`5D:=n;
- X screen`5By+1,x`5D:=n;
- X screen`5By-1,x+1`5D:=n;
- X end
- X else
- X if position = 4 then
- X begin
- X screen`5By,x-1`5D:=n;
- X screen`5By,x+1`5D:=n;
- X screen`5By+1,x+1`5D:=n;
- X end;
- X end
- X else
- X if shape = 4 then
- X begin
- X if position = 1 then
- X begin
- X screen`5By-1,x`5D:=n;
- X screen`5By+1,x`5D:=n;
- X screen`5By,x+1`5D:=n;
- X end
- X else
- X if position = 2 then
- X begin
- X screen`5By+1,x`5D:=n;
- X screen`5By,x-1`5D:=n;
- X screen`5By,x+1`5D:=n;
- X end
- X else
- X if position = 3 then
- X begin
- X screen`5By-1,x`5D:=n;
- X screen`5By+1,x`5D:=n;
- X screen`5By,x-1`5D:=n;
- X end
- X else
- X if position = 4 then
- X begin
- X screen`5By-1,x`5D:=n;
- X screen`5By,x-1`5D:=n;
- X screen`5By,x+1`5D:=n;
- X end;
- X end
- X else
- X if shape = 5 then
- X begin
- X if (position = 1) or (position = 3) then
- X begin
- X screen`5By+1,x`5D:=n;
- X screen`5By,x+1`5D:=n;
- X screen`5By-1,x+1`5D:=n;
- X end
- X else
- X if (position = 2) or (position = 4) then
- X begin
- X screen`5By,x-1`5D:=n;
- X screen`5By+1,x`5D:=n;
- X screen`5By+1,x+1`5D:=n;
- X end;
- X end
- X else
- X if shape = 6 then
- X begin
- X if (position = 1) or (position = 3) then
- X begin
- X screen`5By-1,x`5D:=n;
- X screen`5By,x+1`5D:=n;
- X screen`5By+1,x+1`5D:=n;
- X end
- X else
- X if (position = 2) or (position = 4) then
- X begin
- X screen`5By,x+1`5D:=n;
- X screen`5By+1,x`5D:=n;
- X screen`5By+1,x-1`5D:=n;
- X end;
- X end
- X else
- X if shape = 7 then
- X begin
- X if (position = 1) or (position = 3) then
- X begin
- X screen`5By-1,x`5D:=n;
- X screen`5By+1,x`5D:=n;
- X screen`5By+2,x`5D:=n;
- X end
- X else
- X if (position = 2) or (position = 4) then
- X begin
- X screen`5By,x-2`5D:=n;
- X screen`5By,x-1`5D:=n;
- X screen`5By,x+1`5D:=n;
- X end;
- X end;
- Xend;
- X`7B*************************************************************************
- V***`7D
- X
- X
- X`7B***********************************************************************`7
- VD
- Xprocedure Check(shape,position,y,x:integer; var change:boolean);
- X
- Xbegin
- X change:=true;
- X if shape = 2 then
- X begin
- X if position = 1 then
- X begin
- X if screen`5By-1,x`5D=1 then change:= false
- X else
- X if screen`5By+1,x`5D=1 then change:= false
- X else
- X if screen`5By+1,x+1`5D=1 then change:= false;
- X end
- X else
- X if position = 2 then
- X begin
- X if screen`5By,x+1`5D=1 then change:= false else
- X if screen`5By,x-1`5D=1 then change:= false else
- X if screen`5By+1,x-1`5D=1 then change:= false;
- X end
- X else
- X if position = 3 then
- X begin
- X if screen`5By+1,x`5D=1 then change:= false else
- X if screen`5By-1,x`5D=1 then change:= false else
- X if screen`5By-1,x-1`5D=1 then change:= false;
- X end
- X else
- X if position = 4 then
- X begin
- X if screen`5By,x-1`5D=1 then change:= false else
- X if screen`5By,x+1`5D=1 then change:= false else
- X if screen`5By-1,x+1`5D=1 then change:= false;
- X end;
- X end
- X else
- X if shape = 3 then
- X begin
- X if position = 1 then
- X begin
- X if screen`5By-1,x`5D=1 then change:= false else
- X if screen`5By+1,x`5D=1 then change:= false else
- X if screen`5By+1,x-1`5D=1 then change:= false;
- X end
- X else
- X if position = 2 then
- X begin
- X if screen`5By,x+1`5D=1 then change:= false else
- X if screen`5By,x-1`5D=1 then change:= false else
- X if screen`5By-1,x-1`5D=1 then change:= false;
- X end
- X else
- X if position = 3 then
- X begin
- X if screen`5By-1,x`5D=1 then change:= false else
- X if screen`5By+1,x`5D=1 then change:= false else
- X if screen`5By-1,x+1`5D=1 then change:= false;
- X end
- X else
- X if position = 4 then
- X begin
- X if screen`5By,x-1`5D=1 then change:= false else
- X if screen`5By,x+1`5D=1 then change:= false else
- X if screen`5By+1,x+1`5D=1 then change:= false;
- X end;
- X end
- X else
- X if shape = 4 then
- X begin
- X if position = 1 then
- X begin
- X if screen`5By-1,x`5D=1 then change:= false else
- X if screen`5By+1,x`5D=1 then change:= false else
- X if screen`5By,x+1`5D=1 then change:= false;
- X end
- X else
- X if position = 2 then
- X begin
- X if screen`5By+1,x`5D=1 then change:= false else
- X if screen`5By,x-1`5D=1 then change:= false else
- X if screen`5By,x+1`5D=1 then change:= false;
- X end
- X else
- X if position = 3 then
- X begin
- X if screen`5By-1,x`5D=1 then change:= false else
- X if screen`5By+1,x`5D=1 then change:= false else
- X if screen`5By,x-1`5D=1 then change:= false;
- X end
- X else
- X if position = 4 then
- X begin
- X if screen`5By-1,x`5D=1 then change:= false else
- X if screen`5By,x-1`5D=1 then change:= false else
- X if screen`5By,x+1`5D=1 then change:= false;
- X end;
- X end
- X else
- X if shape = 5 then
- X begin
- X if (position = 1) or (position = 3) then
- X begin
- X if screen`5By+1,x`5D=1 then change:= false else
- X if screen`5By,x+1`5D=1 then change:= false else
- X if screen`5By-1,x+1`5D=1 then change:= false;
- X end
- X else
- X if (position = 2) or (position = 4) then
- X begin
- X if screen`5By,x-1`5D=1 then change:= false else
- X if screen`5By+1,x`5D=1 then change:= false else
- X if screen`5By+1,x+1`5D=1 then change:= false;
- X end;
- X end
- X else
- X if shape = 6 then
- X begin
- X if (position = 1) or (position = 3) then
- X begin
- X if screen`5By-1,x`5D=1 then change:= false else
- X if screen`5By,x+1`5D=1 then change:= false else
- X if screen`5By+1,x+1`5D=1 then change:= false;
- X end
- X else
- X if (position = 2) or (position = 4) then
- X begin
- X if screen`5By,x+1`5D=1 then change:= false else
- X if screen`5By+1,x`5D=1 then change:= false else
- X if screen`5By+1,x-1`5D=1 then change:= false;
- X end;
- X end
- X else
- X if shape = 7 then
- X begin
- X if (position = 1) or (position = 3) then
- X begin
- X if screen`5By-1,x`5D=1 then change:= false else
- X if screen`5By+1,x`5D=1 then change:= false else
- X if screen`5By+2,x`5D=1 then change:= false;
- X end
- X else
- X if (position = 2) or (position = 4) then
- X begin
- X if screen`5By,x-2`5D=1 then change:= false else
- X if screen`5By,x-1`5D=1 then change:= false else
- X if screen`5By,x+1`5D=1 then change:= false;
- X end;
- X end;
- Xend;
- X`7B*************************************************************************
- V***`7D
- X
- X
- X`7B*************************************************************************
- V***`7D
- Xprocedure Create(var shape,position,y,x:integer);
- X
- Xvar
- X shapenum:integer;
- X
- Xbegin
- X shapenum:=random(1,23);
- X if shapenum < 4 then shape:=1
- X else
- X if shapenum < 7 then shape:=2
- X else
- X if shapenum < 11 then shape:=3
- X else
- +-+-+-+-+-+-+-+- END OF PART 3 +-+-+-+-+-+-+-+-
- --
- \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
- < Joe Koffley KOFFLEY@NRLVAX.NRL.NAVY.MIL >
- < Naval Research Laboratory KOFFLEY@SMOVAX.NRL.NAVY.MIL >
- < Space Systems Division AT&T : 202-767-0894 >
- \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
-
-