home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
mbug
/
mbug147.arc
/
ADVENTUR.LBR
/
ADV1UNT3.PZS
/
ADV1UNT3.PAS
Wrap
Pascal/Delphi Source File
|
1979-12-31
|
7KB
|
387 lines
(* text module advunit4.txt *)
(*************************************************************************)
(* procedure pmaze *)
(*************************************************************************)
PROCEDURE pmaze;
TYPE
mazerooms = (m1,m2,m3,m4,m5,m6,m7,m8,m9,
m10,m11,m12,m13,m14,m15,m16,m17,m18,m19);
VAR
mazeloc: mazerooms;
bitset: ARRAY[directions] OF BOOLEAN;
FUNCTION bittest (v: INTEGER; dir: directions): BOOLEAN;
BEGIN
IF ((v DIV twopow[dir]) MOD 2) = 1 THEN
bittest := true
ELSE
bittest := false;
(* endif *)
END; (* function bittest *)
PROCEDURE describe( wh: INTEGER);
VAR
dir: directions;
BEGIN
writeln ('You are in a maze of featureless');
writeln ('passages. There are exits visible');
writeln ('in the following directions:');
if bittest (wh,n) THEN write ('n ');
if bittest (wh,s) THEN write ('s ');
if bittest (wh,e) THEN write ('e ');
if bittest (wh,w) THEN write ('w ');
if bittest (wh,u) THEN write ('u ');
if bittest (wh,d) THEN write ('d ');
writeln;
END; (* procedure describe *)
PROCEDURE sameplace;
BEGIN
writeln ('You have crawled around some twisted');
writeln ('tunnels and wound up where you began.');
END; (* proc sameplace *)
PROCEDURE treasure;
BEGIN
IF NOT carrying THEN
BEGIN
IF readmsg THEN
BEGIN
writeln ('The treasure is here!!');
writeln ('Do you want to take it now?');
readln (command);
command := Upcase(command);
IF (command = 'Y') OR (command = 'YES') THEN
carrying := true;
END
ELSE
BEGIN
writeln ('The light is extremely dim here.');
writeln ('You better get out or risk falling');
writeln ('into a pit.');
END; (* if readmsg *)
END; (* if not carrying *)
END; (* proc treasure *)
PROCEDURE pm1;
BEGIN
writeln ('You are in a maze of featureless passages.');
writeln ('From here you can go south, east, west or up.');
CASE whichway OF
s: location := ladder;
e: mazeloc := m2;
w: mazeloc := m4;
u: location := steam;
n,d: noway;
END; (* case *)
END; (* proc pm1 *)
PROCEDURE pm2;
BEGIN
describe (nw);
CASE whichway OF
n: mazeloc := m1;
w: sameplace;
e,s,u,d: noway;
END; (* case *)
END; (* proc pm2*)
PROCEDURE pm3;
BEGIN
describe (ne);
CASE whichway OF
n: mazeloc := m1;
e: sameplace;
w,s,u,d: noway;
END; (* case *)
END; (* proc pm3*)
PROCEDURE pm4;
BEGIN
describe (sew);
CASE whichway OF
s: mazeloc := m7;
e: mazeloc := m3;
w: mazeloc := m5;
n,u,d: noway;
END; (* case *)
END; (* proc pm4*)
PROCEDURE pm5;
BEGIN
describe (nonly);
CASE whichway OF
n: mazeloc := m1;
s,e,w,u,d: noway;
END; (* case *)
END; (* proc pm5*)
PROCEDURE pm6;
BEGIN
describe (ne);
CASE whichway OF
n: mazeloc := m4;
e: sameplace;
s,w,u,d: noway;
END; (* case *)
END; (* proc pm6*)
PROCEDURE pm7;
BEGIN
describe (nsew);
CASE whichway OF
n: mazeloc := m5;
s: mazeloc := m9;
e: mazeloc := m6;
w: mazeloc := m8;
u,d: noway;
END; (* case *)
END; (* proc pm7*)
PROCEDURE pm8;
BEGIN
describe (nw);
CASE whichway OF
n: mazeloc := m5;
w: sameplace;
e,s,u,d: noway;
END; (* case *)
END; (* proc pm8*)
PROCEDURE pm9;
BEGIN
describe (sw);
CASE whichway OF
s: mazeloc := m11;
w: mazeloc := m10;
n,e,u,d: noway;
END; (* case *)
END; (* proc pm9*)
PROCEDURE pm10;
BEGIN
describe (ns);
CASE whichway OF
s: sameplace;
n: mazeloc := m8;
e,w,u,d: noway;
END; (* case *)
END; (* proc pm10*)
PROCEDURE pm11;
BEGIN
describe (newud);
CASE whichway OF
n: mazeloc := m9;
e: mazeloc := m6;
w: mazeloc := m10;
u: mazeloc := m1;
d: mazeloc := m12;
s: noway;
END; (* case *)
END; (* proc pm11*)
PROCEDURE pm12;
BEGIN
describe (dn);
CASE whichway OF
n: mazeloc := m13;
d: mazeloc := m16;
e,s,w,u: noway;
END; (* case *)
END; (* proc pm12*)
PROCEDURE pm13;
BEGIN
describe (dn);
CASE whichway OF
n: mazeloc := m14;
d: mazeloc := m17;
e,s,w,u: noway;
END; (* case *)
END; (* proc pm13*)
PROCEDURE pm14;
BEGIN
describe (dn);
CASE whichway OF
n: mazeloc := m15;
d: mazeloc := m18;
e,s,w,u: noway;
END; (* case *)
END; (* proc pm14*)
PROCEDURE pm15;
BEGIN
describe (ud);
CASE whichway OF
u: mazeloc := m1;
d: mazeloc := m19;
n,e,s,w: noway;
END; (* case *)
END; (* proc pm15*)
PROCEDURE pm16;
BEGIN
describe (ns);
CASE whichway OF
n: mazeloc := m17;
s: sameplace;
e,w,u,d: noway;
END; (* case *)
END; (* proc pm16*)
PROCEDURE pm17;
BEGIN
describe (ns);
CASE whichway OF
n: mazeloc := m18;
s: mazeloc := m16;
e,w,u,d: noway;
END; (* case *)
END; (* proc pm17*)
PROCEDURE pm18;
BEGIN
describe (ns);
CASE whichway OF
n: mazeloc := m19;
s: mazeloc := m17;
e,w,u,d: noway;
END; (* case *)
END; (* proc pm18*)
PROCEDURE pm19;
BEGIN
describe (su);
treasure;
CASE whichway OF
s: mazeloc := m18;
u: mazeloc := m15;
n,e,w,d: noway;
END; (* case *)
END; (* proc pm19*)
BEGIN (* proc pmaze *)
mazeloc := m1;
REPEAT
CASE mazeloc OF
m1: pm1;
m2: pm2;
m3: pm3;
m4: pm4;
m5: pm5;
m6: pm6;
m7: pm7;
m8: pm8;
m9: pm9;
m10: pm10;
m11: pm11;
m12: pm12;
m13: pm13;
m14: pm14;
m15: pm15;
m16: pm16;
m17: pm17;
m18: pm18;
m19: pm19;
END; (* case *)
UNTIL location <> maze;
END; (* proc pmaze *)