Jump to content

CLI-based maze-game: Difference between revisions

m
→‎{{header|Phix}}: added syntax colouring, marked p2js compatible
(Added Wren)
m (→‎{{header|Phix}}: added syntax colouring, marked p2js compatible)
Line 1,070:
 
=={{header|Phix}}==
<!--<lang Phix>(notonline)-- demo/rosetta/CLI_maze.exw>
<span style="color: #000080;font-style:italic;">-- demo/rosetta/CLI_maze.exw</span>
constant W = platform()=WINDOWS,
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (wait_key(), get_key(), position(), clear_screen(), etc)</span>
UP = iff(W?328:259),
<span style="color: #008080;">constant</span> <span style="color: #000000;">W</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()=</span><span style="color: #004600;">WINDOWS</span><span style="color: #0000FF;">,</span>
DOWN = iff(W?336:258),
<span style="color: #000000;">UP</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">W</span><span style="color: #0000FF;">?</span><span style="color: #000000;">328</span><span style="color: #0000FF;">:</span><span style="color: #000000;">259</span><span style="color: #0000FF;">),</span>
LEFT = iff(W?331:260),
<span style="color: #000000;">DOWN</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">W</span><span style="color: #0000FF;">?</span><span style="color: #000000;">336</span><span style="color: #0000FF;">:</span><span style="color: #000000;">258</span><span style="color: #0000FF;">),</span>
RGHT = iff(W?333:261),
<span style="color: #000000;">LEFT</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">W</span><span style="color: #0000FF;">?</span><span style="color: #000000;">331</span><span style="color: #0000FF;">:</span><span style="color: #000000;">260</span><span style="color: #0000FF;">),</span>
ESC = #1B,
<span style="color: #000000;">RGHT</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">W</span><span style="color: #0000FF;">?</span><span style="color: #000000;">333</span><span style="color: #0000FF;">:</span><span style="color: #000000;">261</span><span style="color: #0000FF;">),</span>
 
<span style="color: #000000;">ESC</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#1B</span><span style="color: #0000FF;">,</span>
MX = 69, -- No of columns (1..MX), must be odd.
MY = 31, -- No of rows (1..MY), must be odd.
<span style="color: #000000;">MX</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">69</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- No of columns (1..MX), must be odd.</span>
TREASURE = '$',
<span style="color: #000000;">MY</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">31</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- No of rows (1..MY), must be odd.</span>
TREASUREDB = 3, -- treasuredb means how many $ signs will be placed
<span style="color: #000000;">TREASURE</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'$'</span><span style="color: #0000FF;">,</span>
WAY = ' ',
<span style="color: #000000;">TREASUREDB</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- treasuredb means how many $ signs will be placed</span>
WALL = 'X',
<span style="color: #000000;">WAY</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">' '</span><span style="color: #0000FF;">,</span>
DOORS = 20, -- No of doors
<span style="color: #000000;">WALL</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'X'</span><span style="color: #0000FF;">,</span>
DOOR_CENTER = 'o',
<span style="color: #000000;">DOORS</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">20</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- No of doors</span>
DOOR_WING_VERTICAL = '|',
<span style="color: #000000;">DOOR_CENTER</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'o'</span><span style="color: #0000FF;">,</span>
DOOR_WING_HORIZONTAL = '-',
<span style="color: #000000;">DOOR_WING_VERTICAL</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'|'</span><span style="color: #0000FF;">,</span>
HERO = '@',
<span style="color: #000000;">DOOR_WING_HORIZONTAL</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'-'</span><span style="color: #0000FF;">,</span>
DEAD_HERO = '+',
<span style="color: #000000;">HERO</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'@'</span><span style="color: #0000FF;">,</span>
NUMBER_OF_BOMBS = 5,
<span style="color: #000000;">DEAD_HERO</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'+'</span><span style="color: #0000FF;">,</span>
BOMB = 'b',
<span style="color: #000000;">NUMBER_OF_BOMBS</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span>
NUMBER_OF_MONSTERS = 20,
<span style="color: #000000;">BOMB</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'b'</span><span style="color: #0000FF;">,</span>
MONSTER = '*',
<span style="color: #000000;">NUMBER_OF_MONSTERS</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">20</span><span style="color: #0000FF;">,</span>
WEAK_MONSTER = '.',
<span style="color: #000000;">MONSTER</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'*'</span><span style="color: #0000FF;">,</span>
MONSTER_WEAKNESS_PROBABILITY = 25,
<span style="color: #000000;">WEAK_MONSTER</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'.'</span><span style="color: #0000FF;">,</span>
-- The higher the above number, the lower the chance that a strong monster will become weak.
<span style="color: #000000;">MONSTER_WEAKNESS_PROBABILITY</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">25</span><span style="color: #0000FF;">,</span>
MONSTER_INTENSIFIES_PROBABILITY = 5,
<span style="color: #000080;font-style:italic;">-- The higher the number above number, the lower the chance that a weakstrong monster will getbecome strongerweak.</span>
<span style="color: #000000;">MONSTER_INTENSIFIES_PROBABILITY</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span>
<span style="color: #000080;font-style:italic;">-- The higher the number above, the lower the chance that a weak monster will get stronger.</span>
help_text = """
Maze game.
<span style="color: #000000;">help_text</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
 
Maze game.
The object of the game is to get all the treasures. The symbol of the treasure is the $ sign.
Help (display this text): press ? or h
The object of the game is to get all the treasures. The symbol of the treasure is the $ sign.
Exit: press Esc or q
Help (display this text): press ? or h
You can detonate a bomb by pressing b, but only as long as your bomb remains.
Exit: press Esc or q
A bomb destroys every wall around the player (the outermost, framing of the maze
You can detonate a bomb by pressing b, but only as long as your bomb remains.
except for its walls), but it won't kill monsters.
A bomb destroys every wall around the player (the outermost, framing of the maze
The bomb does not destroy diagonally, only vertically and horizontally.
except for its walls), but it won't kill monsters.
The bomb will not destroy the doors or the treasure.
The bomb does not destroy diagonally, only vertically and horizontally.
You can also find bombs in the maze, represented by the letter b. If you step on them,
The bomb will not destroy the doors or the treasure.
you got the bomb with it, that is, the number of your bombs increases, for later use.
You can also find bombs in the maze, represented by the letter b. If you step on them,
The game ends when you have acquired all the treasures.
you got the bomb with it, that is, the number of your bombs increases, for later use.
The maze has not only walls but also revolving doors.
The game ends when you have acquired all the treasures.
The revolving door, if horizontal, looks like this: -o-
The maze has not only walls but also revolving doors.
If vertical, like this:
The revolving door, if horizontal, looks like this: -o-
|
If vertical, like this:
o
|
o
The center of the revolving door is represented by the character o, the wings by the line.
|
The revolving door can be rotated if you take your wing in the right direction with your character,
The center of the revolving door is represented by the character o, the wings by the line.
and if nothing stands in the way of rotation.
The revolving door can be rotated if you take your wing in the right direction with your character,
The player is represented by @ in the game, and his starting point is always in the lower left corner.
and if nothing stands in the way of rotation.
There is a possibility of a little cheating in the game: each press of the letter c is one increases
The player is represented by @ in the game, and his starting point is always in the lower left corner.
the amount of your bombs.
There is a possibility of a little cheating in the game: each press of the letter c is one increases
"""
the amount of your bombs.
 
"""</span>
integer bombs = 3,
treasure_counter = 0
<span style="color: #004080;">integer</span> <span style="color: #000000;">bombs</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span>
 
<span style="color: #000000;">treasure_counter</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
sequence tb = repeat(WALL,MX),
in = WALL&repeat(WAY,MX-2)&WALL,
<span style="color: #004080;">sequence</span> <span style="color: #000000;">tb</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">WALL</span><span style="color: #0000FF;">,</span><span style="color: #000000;">MX</span><span style="color: #0000FF;">),</span>
grid = {tb}&repeat(in,MY-2)&{tb},
<span style="color: #000000;">inw</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WALL</span><span style="color: #0000FF;">&</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">WAY</span><span style="color: #0000FF;">,</span><span style="color: #000000;">MX</span><span style="color: #0000FF;">-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)&</span><span style="color: #000000;">WALL</span><span style="color: #0000FF;">,</span>
sxkoord = repeat(0,NUMBER_OF_MONSTERS),
<span style="color: #000000;">grid</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">tb</span><span style="color: #0000FF;">}&</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">inw</span><span style="color: #0000FF;">,</span><span style="color: #000000;">MY</span><span style="color: #0000FF;">-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)&{</span><span style="color: #000000;">tb</span><span style="color: #0000FF;">},</span>
sykoord = repeat(0,NUMBER_OF_MONSTERS)
<span style="color: #000000;">sxkoord</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">NUMBER_OF_MONSTERS</span><span style="color: #0000FF;">),</span>
 
<span style="color: #000000;">sykoord</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">NUMBER_OF_MONSTERS</span><span style="color: #0000FF;">)</span>
function gen_flags(integer l)
sequence res = repeat(false,l)
<span style="color: #008080;">function</span> <span style="color: #000000;">gen_flags</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">l</span><span style="color: #0000FF;">)</span>
for i=1 to l by 2 do res[i] = true end for
<span style="color: #004080;">sequence</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #004600;">false</span><span style="color: #0000FF;">,</span><span style="color: #000000;">l</span><span style="color: #0000FF;">)</span>
return res
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">l</span> <span style="color: #008080;">by</span> <span style="color: #000000;">2</span> <span style="color: #008080;">do</span> <span style="color: #000000;">res</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span> <span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end function
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
procedure generatemaze()
sequence colflag = gen_flags(MX),
<span style="color: #008080;">procedure</span> <span style="color: #000000;">generatemaze</span><span style="color: #0000FF;">()</span>
rowflag = gen_flags(MY)
<span style="color: #004080;">sequence</span> <span style="color: #000000;">colflag</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">gen_flags</span><span style="color: #0000FF;">(</span><span style="color: #000000;">MX</span><span style="color: #0000FF;">),</span>
while find(true,colflag)
<span style="color: #000000;">rowflag</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">gen_flags</span><span style="color: #0000FF;">(</span><span style="color: #000000;">MY</span><span style="color: #0000FF;">)</span>
or find(true,rowflag) do
<span style="color: #008080;">while</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #004600;">true</span><span style="color: #0000FF;">,</span><span style="color: #000000;">colflag</span><span style="color: #0000FF;">)</span>
integer direction = rand(4),
<span style="color: #008080;">or</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #004600;">true</span><span style="color: #0000FF;">,</span><span style="color: #000000;">rowflag</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
j = floor(rand(iff(direction<=2?MY:MX))/2)*2+1
<span style="color: #004080;">integer</span> <span style="color: #000000;">direction</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">4</span><span style="color: #0000FF;">),</span>
switch direction do
<span style="color: #000000;">j</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">floor</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">direction</span><span style="color: #0000FF;"><=</span><span style="color: #000000;">2</span><span style="color: #0000FF;">?</span><span style="color: #000000;">MY</span><span style="color: #0000FF;">:</span><span style="color: #000000;">MX</span><span style="color: #0000FF;">))/</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)*</span><span style="color: #000000;">2</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span>
case 1: -- left
<span style="color: #008080;">switch</span> <span style="color: #000000;">direction</span> <span style="color: #008080;">do</span>
if rowflag[j] then
<span style="color: #008080;">case</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">:</span> <span style="color: #000080;font-style:italic;">-- left</span>
for r=1 to MX-1 do
<span style="color: #008080;">if</span> <span style="color: #000000;">rowflag</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]</span> <span style="color: #008080;">then</span>
if grid[j][r]!=WALL
<span style="color: #008080;">for</span> <span style="color: #000000;">r</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">MX</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
and grid[j][r+1]!=WALL then
<span style="color: #008080;">if</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">][</span><span style="color: #000000;">r</span><span style="color: #0000FF;">]!=</span><span style="color: #000000;">WALL</span>
grid[j][r] = WALL
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">][</span><span style="color: #000000;">r</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]!=</span><span style="color: #000000;">WALL</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">][</span><span style="color: #000000;">r</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WALL</span>
end for
rowflag[j] <span style="color: #008080;">end</span> <span style="color: false#008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: if#008080;">for</span>
<span style="color: #000000;">rowflag</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
case 2: -- right
if rowflag[j]<span thenstyle="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">case</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">:</span> <span style="color: #000080;font-style:italic;">-- right</span>
for r=MX to 3 by -1 do
<span style="color: #008080;">if</span> <span style="color: #000000;">rowflag</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]</span> <span style="color: #008080;">then</span>
if grid[j][r-1]!=WALL
<span style="color: #008080;">for</span> <span style="color: #000000;">r</span><span style="color: #0000FF;">=</span><span style="color: #000000;">MX</span> <span style="color: #008080;">to</span> <span style="color: #000000;">3</span> <span style="color: #008080;">by</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
and grid[j][r-2]!=WALL then
<span style="color: #008080;">if</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">][</span><span style="color: #000000;">r</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]!=</span><span style="color: #000000;">WALL</span>
grid[j][r-1] = WALL
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">][</span><span style="color: #000000;">r</span><span style="color: #0000FF;">-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]!=</span><span style="color: #000000;">WALL</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">][</span><span style="color: #000000;">r</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WALL</span>
end for
rowflag[j] <span style="color: #008080;">end</span> <span style="color: false#008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: if#008080;">for</span>
<span style="color: #000000;">rowflag</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
case 3: -- up
if colflag[j]<span thenstyle="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">case</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">:</span> <span style="color: #000080;font-style:italic;">-- up</span>
for c=MY to 3 by -1 do
<span style="color: #008080;">if</span> <span style="color: #000000;">colflag</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]</span> <span style="color: #008080;">then</span>
if grid[c-1][j]!=WALL
<span style="color: #008080;">for</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #000000;">MY</span> <span style="color: #008080;">to</span> <span style="color: #000000;">3</span> <span style="color: #008080;">by</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
and grid[c-2][j]!=WALL then
<span style="color: #008080;">if</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">c</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]!=</span><span style="color: #000000;">WALL</span>
grid[c-1][j] = WALL
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">c</span><span style="color: #0000FF;">-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">][</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]!=</span><span style="color: #000000;">WALL</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">c</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WALL</span>
end for
colflag[j] <span style="color: #008080;">end</span> <span style="color: false#008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: if#008080;">for</span>
<span style="color: #000000;">colflag</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
case 4: -- down
if colflag[j]<span thenstyle="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">case</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">:</span> <span style="color: #000080;font-style:italic;">-- down</span>
for c=1 to MY-1 do
<span style="color: #008080;">if</span> <span style="color: #000000;">colflag</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]</span> <span style="color: #008080;">then</span>
if grid[c][j]!=WALL
<span style="color: #008080;">for</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">MY</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
and grid[c+1][j]!=WALL then
<span style="color: #008080;">if</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">c</span><span style="color: #0000FF;">][</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]!=</span><span style="color: #000000;">WALL</span>
grid[c][j] = WALL
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">c</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]!=</span><span style="color: #000000;">WALL</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">c</span><span style="color: #0000FF;">][</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WALL</span>
end for
colflag[j] <span style="color: #008080;">end</span> <span style="color: false#008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: if#008080;">for</span>
<span style="color: #000000;">colflag</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
end switch
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end while
<span style="color: #008080;">end</span> <span style="color: #008080;">switch</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
integer doors_placed = 0, x, y
while doors_placed<DOORS do
<span style="color: #004080;">integer</span> <span style="color: #000000;">doors_placed</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">y</span>
x = rand(MX-4)+2
<span style="color: #008080;">while</span> <span style="color: #000000;">doors_placed</span><span style="color: #0000FF;"><</span><span style="color: #000000;">DOORS</span> <span style="color: #008080;">do</span>
y = rand(MY-4)+2
<span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">MX</span><span style="color: #0000FF;">-</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)+</span><span style="color: #000000;">2</span>
if grid[y ][x ] != WAY
<span style="color: #000000;">y</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">MY</span><span style="color: #0000FF;">-</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)+</span><span style="color: #000000;">2</span>
and grid[y-1][x-1] == WAY -- top left corner free
<span style="color: #008080;">if</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span> <span style="color: #0000FF;">][</span><span style="color: #000000;">x</span> <span style="color: #0000FF;">]</span> <span style="color: #0000FF;">!=</span> <span style="color: #000000;">WAY</span>
and grid[y-1][x+1] == WAY -- top right corner free
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WAY</span> <span style="color: #000080;font-style:italic;">-- top left corner free</span>
and grid[y+1][x-1] == WAY -- left corner free
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WAY</span> <span style="color: #000080;font-style:italic;">-- top right corner free</span>
and grid[y+1][x+1] == WAY then -- right corner free
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WAY</span> <span style="color: #000080;font-style:italic;">-- left corner free</span>
-- Let's see if we can put a vertical door.
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WAY</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- right corner free
if grid[y-1][x ] == WALL -- wall above the current position
and grid[y-2][x- Let's ]see ==if WALL --we wallcan aboveput thea currentvertical positiondoor.</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span> <span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WALL</span> <span style="color: #000080;font-style:italic;">-- wall above the current position</span>
and grid[y+1][x ] == WALL -- wall below the current position
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span> <span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WALL</span> <span style="color: #000080;font-style:italic;">-- wall above the current position</span>
and grid[y+2][x ] == WALL -- wall below the current position
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span> <span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WALL</span> <span style="color: #000080;font-style:italic;">-- wall below the current position</span>
and grid[y ][x-1] == WAY -- left neighbor free
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">+</span><span style="color: #000000;">2</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span> <span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WALL</span> <span style="color: #000080;font-style:italic;">-- wall below the current position</span>
and grid[y ][x+1] == WAY then -- right neighbor free
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span> <span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WAY</span> <span style="color: #000080;font-style:italic;">-- left neighbor free</span>
grid[y ][x] = DOOR_CENTER
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span> <span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WAY</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- right neighbor free</span>
grid[y-1][x] = DOOR_WING_VERTICAL
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span> <span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">DOOR_CENTER</span>
grid[y+1][x] = DOOR_WING_VERTICAL
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">DOOR_WING_VERTICAL</span>
doors_placed += 1
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">DOOR_WING_VERTICAL</span>
-- Let's see if we can put a horizontal door.
<span style="color: #000000;">doors_placed</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
elsif grid[y ][x-1] == WALL -- wall left of the current position
<span style="color: #000080;font-style:italic;">-- Let's see if we can put a horizontal door.</span>
and grid[y ][x-2] == WALL -- wall left of the current position
<span style="color: #008080;">elsif</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span> <span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WALL</span> <span style="color: #000080;font-style:italic;">-- wall left of the current position</span>
and grid[y ][x+1] == WALL -- wall right of the current position
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span> <span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WALL</span> <span style="color: #000080;font-style:italic;">-- wall left of the current position</span>
and grid[y ][x+2] == WALL -- wall right of the current position
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span> <span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WALL</span> <span style="color: #000080;font-style:italic;">-- wall right of the current position</span>
and grid[y+1][x ] == WAY -- above neighbor free
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span> <span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">+</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WALL</span> <span style="color: #000080;font-style:italic;">-- wall right of the current position</span>
and grid[y-1][x ] == WAY then -- below neighbor free
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span> <span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WAY</span> <span style="color: #000080;font-style:italic;">-- above neighbor free</span>
grid[y][x ] = DOOR_CENTER
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span> <span style="color: #0000FF;">]</span> <span style="color: #0000FF;">==</span> <span style="color: #000000;">WAY</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- below neighbor free</span>
grid[y][x-1] = DOOR_WING_HORIZONTAL
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span> <span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">DOOR_CENTER</span>
grid[y][x+1] = DOOR_WING_HORIZONTAL
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">DOOR_WING_HORIZONTAL</span>
doors_placed += 1
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">DOOR_WING_HORIZONTAL</span>
end if
<span style="color: #000000;">doors_placed</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end while
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
sequence stuff = {{TREASUREDB, TREASURE},
{NUMBER_OF_BOMBS, BOMB},
<span style="color: #004080;">sequence</span> <span style="color: #000000;">stuff</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #000000;">TREASUREDB</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">TREASURE</span><span style="color: #0000FF;">},</span>
{NUMBER_OF_MONSTERS, WEAK_MONSTER}} -- At first, all monsters are weak.
<span style="color: #0000FF;">{</span><span style="color: #000000;">NUMBER_OF_BOMBS</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">BOMB</span><span style="color: #0000FF;">},</span>
 
<span style="color: #0000FF;">{</span><span style="color: #000000;">NUMBER_OF_MONSTERS</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">WEAK_MONSTER</span><span style="color: #0000FF;">}}</span> <span style="color: #000080;font-style:italic;">-- At first, all monsters are weak.</span>
for i=1 to length(stuff) do
integer {n, what} = stuff[i],
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">stuff</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
iter = 1
<span style="color: #004080;">integer</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">what</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">stuff</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span>
while n do
<span style="color: #000000;">iter</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
x = rand(MX)
<span style="color: #008080;">while</span> <span style="color: #000000;">n</span> <span style="color: #008080;">do</span>
y = rand(MY)
<span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">MX</span><span style="color: #0000FF;">)</span>
if grid[y][x]==WAY then
<span style="color: #000000;">y</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">MY</span><span style="color: #0000FF;">)</span>
grid[y][x] = what
<span style="color: #008080;">if</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">]==</span><span style="color: #000000;">WAY</span> <span style="color: #008080;">then</span>
if what=WEAK_MONSTER then
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">what</span>
sxkoord[n] = x
<span style="color: #008080;">if</span> <span style="color: #000000;">what</span><span style="color: #0000FF;">=</span><span style="color: #000000;">WEAK_MONSTER</span> <span style="color: #008080;">then</span>
sykoord[n] = y
<span style="color: #000000;">sxkoord</span><span style="color: #0000FF;">[</span><span style="color: #000000;">n</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">x</span>
end if
<span style="color: #000000;">sykoord</span><span style="color: #0000FF;">[</span><span style="color: #000000;">n</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">y</span>
n -= 1
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<span style="color: #000000;">n</span> <span style="color: #0000FF;">-=</span> <span style="color: #000000;">1</span>
iter += 1
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
if iter>10000 then ?9/0 end if -- (sanity check)
<span style="color: #000000;">iter</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
end while
<span style="color: #008080;">if</span> <span style="color: #000000;">iter</span><span style="color: #0000FF;">></span><span style="color: #000000;">10000</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> <span style="color: #000080;font-style:italic;">-- (sanity check)</span>
end for
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
end procedure
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
integer terminate = false,
showhelp = false
<span style="color: #004080;">integer</span> <span style="color: #000000;">terminate</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span><span style="color: #0000FF;">,</span>
 
<span style="color: #000000;">showhelp</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
procedure draw()
cursor(NO_CURSOR)
<span style="color: #008080;">procedure</span> <span style="color: #000000;">draw</span><span style="color: #0000FF;">()</span>
while true do
<span style="color: #7060A8;">cursor</span><span style="color: #0000FF;">(</span><span style="color: #004600;">NO_CURSOR</span><span style="color: #0000FF;">)</span>
if showhelp then
<span style="color: #008080;">while</span> <span style="color: #004600;">true</span> <span style="color: #008080;">do</span>
clear_screen()
<span style="color: #008080;">if</span> <span style="color: #000000;">showhelp</span> <span style="color: #008080;">then</span>
puts(1,help_text)
<span style="color: #7060A8;">clear_screen</span><span style="color: #0000FF;">()</span>
{} = wait_key()
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">help_text</span><span style="color: #0000FF;">)</span>
clear_screen()
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">()</span>
showhelp = false
<span style="color: #7060A8;">clear_screen</span><span style="color: #0000FF;">()</span>
end if
<span style="color: #000000;">showhelp</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
position(1,1)
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
puts(1,join(grid,"\n")&"\n\n")
<span style="color: #7060A8;">position</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
printf(1,"Collected treasure = %d Bombs = %d\n",{treasure_counter,bombs})
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #000000;">grid</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)&</span><span style="color: #008000;">"\n\n"</span><span style="color: #0000FF;">)</span>
if terminate then exit end if
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Collected treasure = %d Bombs = %d\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">treasure_counter</span><span style="color: #0000FF;">,</span><span style="color: #000000;">bombs</span><span style="color: #0000FF;">})</span>
task_yield()
<span style="color: #008080;">if</span> <span style="color: #000000;">terminate</span> <span style="color: #008080;">then</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end while
<span style="color: #000000;">task_yield</span><span style="color: #0000FF;">()</span>
end procedure
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
constant dy = {-1,+1, 0, 0},
dx = { 0, 0,-1,+1},
<span style="color: #008080;">constant</span> <span style="color: #000000;">dy</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">},</span>
HV = {DOOR_WING_HORIZONTAL,DOOR_WING_VERTICAL}
<span style="color: #000000;">dx</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},</span>
 
<span style="color: #000000;">HV</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">DOOR_WING_HORIZONTAL</span><span style="color: #0000FF;">,</span><span style="color: #000000;">DOOR_WING_VERTICAL</span><span style="color: #0000FF;">}</span>
procedure rotate_door(integer ny,nx)
for i=1 to 4 do
<span style="color: #008080;">procedure</span> <span style="color: #000000;">rotate_door</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">ny</span><span style="color: #0000FF;">,</span><span style="color: #000000;">nx</span><span style="color: #0000FF;">)</span>
integer wy = dy[i],
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">4</span> <span style="color: #008080;">do</span>
wx = dx[i],
<span style="color: #004080;">integer</span> <span style="color: #000000;">wy</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">dy</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span>
cy = ny+wy,
<span style="color: #000000;">wx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">dx</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span>
cx = nx+wx
<span style="color: #000000;">cy</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">ny</span><span style="color: #0000FF;">+</span><span style="color: #000000;">wy</span><span style="color: #0000FF;">,</span>
if grid[cy,cx]=DOOR_CENTER then
<span style="color: #000000;">cx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">nx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">wx</span>
if grid[cy-1][cx-1]=WAY
<span style="color: #008080;">if</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">DOOR_CENTER</span> <span style="color: #008080;">then</span>
and grid[cy-1][cx+1]=WAY
<span style="color: #008080;">if</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">WAY</span>
and grid[cy+1][cx-1]=WAY
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">WAY</span>
and grid[cy+1][cx+1]=WAY then -- four corners empty
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">WAY</span>
integer py = dy[-i],
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">WAY</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- four corners empty</span>
px = dx[-i]
<span style="color: #004080;">integer</span> <span style="color: #000000;">py</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">dy</span><span style="color: #0000FF;">[-</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span>
if grid[cy+py][cx+px]=WAY
<span style="color: #000000;">px</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">dx</span><span style="color: #0000FF;">[-</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
and grid[cy-py][cx-px]=WAY then -- swung door empty
<span style="color: #008080;">if</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">py</span><span style="color: #0000FF;">][</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">px</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">WAY</span>
integer door = grid[ny][nx],
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">py</span><span style="color: #0000FF;">][</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">px</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">WAY</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- swung door empty</span>
flip = HV[-find(door,HV)]
<span style="color: #004080;">integer</span> <span style="color: #000000;">door</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ny</span><span style="color: #0000FF;">][</span><span style="color: #000000;">nx</span><span style="color: #0000FF;">],</span>
grid[cy+py][cx+px] = flip
<span style="color: #000000;">flip</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">HV</span><span style="color: #0000FF;">[-</span><span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">door</span><span style="color: #0000FF;">,</span><span style="color: #000000;">HV</span><span style="color: #0000FF;">)]</span>
grid[cy-py][cx-px] = flip
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">py</span><span style="color: #0000FF;">][</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">px</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">flip</span>
grid[cy+wy][cx+wx] = WAY
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">py</span><span style="color: #0000FF;">][</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">px</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">flip</span>
grid[cy-wy][cx-wx] = WAY
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">wy</span><span style="color: #0000FF;">][</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">wx</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WAY</span>
end if
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">cy</span><span style="color: #0000FF;">-</span><span style="color: #000000;">wy</span><span style="color: #0000FF;">][</span><span style="color: #000000;">cx</span><span style="color: #0000FF;">-</span><span style="color: #000000;">wx</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WAY</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
exit
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<span style="color: #008080;">exit</span>
end for
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end procedure
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
integer x = 1,
y = MY-2
<span style="color: #004080;">integer</span> <span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span>
 
<span style="color: #000000;">y</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">MY</span><span style="color: #0000FF;">-</span><span style="color: #000000;">2</span>
procedure keyboard()
integer ny,nx
<span style="color: #008080;">procedure</span> <span style="color: #000000;">keyboard</span><span style="color: #0000FF;">()</span>
while not terminate do
<span style="color: #004080;">integer</span> <span style="color: #000000;">ny</span><span style="color: #0000FF;">,</span><span style="color: #000000;">nx</span>
integer ch = lower(get_key())
<span style="color: #008080;">while</span> <span style="color: #008080;">not</span> <span style="color: #000000;">terminate</span> <span style="color: #008080;">do</span>
if ch=-1 then task_yield()
<span style="color: #004080;">integer</span> <span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">lower</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">get_key</span><span style="color: #0000FF;">())</span>
elsif ch=ESC or ch='q' then exit
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=-</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> <span style="color: #000000;">task_yield</span><span style="color: #0000FF;">()</span>
elsif ch='b' and bombs!=0 then
<span style="color: #008080;">elsif</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">ESC</span> <span style="color: #008080;">or</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'q'</span> <span style="color: #008080;">then</span> <span style="color: #008080;">exit</span>
bombs -= 1
<span style="color: #008080;">elsif</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'b'</span> <span style="color: #008080;">and</span> <span style="color: #000000;">bombs</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
for i=1 to 4 do
<span style="color: #000000;">bombs</span> <span style="color: #0000FF;">-=</span> <span style="color: #000000;">1</span>
ny = y+dy[i]
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">4</span> <span style="color: #008080;">do</span>
nx = x+dx[i]
<span style="color: #000000;">ny</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">y</span><span style="color: #0000FF;">+</span><span style="color: #000000;">dy</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
if ny>1 and ny<MY
<span style="color: #000000;">nx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">+</span><span style="color: #000000;">dx</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
and nx>1 and nx<MX
<span style="color: #008080;">if</span> <span style="color: #000000;">ny</span><span style="color: #0000FF;">></span><span style="color: #000000;">1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">ny</span><span style="color: #0000FF;"><</span><span style="color: #000000;">MY</span>
and grid[ny][nx]=WALL then
<span style="color: #008080;">and</span> <span style="color: #000000;">nx</span><span style="color: #0000FF;">></span><span style="color: #000000;">1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">nx</span><span style="color: #0000FF;"><</span><span style="color: #000000;">MX</span>
grid[ny][nx]=WAY
<span style="color: #008080;">and</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ny</span><span style="color: #0000FF;">][</span><span style="color: #000000;">nx</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">WALL</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ny</span><span style="color: #0000FF;">][</span><span style="color: #000000;">nx</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">WAY</span>
end for
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
elsif ch='c' then
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
bombs += 1
<span style="color: #008080;">elsif</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'c'</span> <span style="color: #008080;">then</span>
elsif ch='?' or ch='h' then
<span style="color: #000000;">bombs</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
showhelp = true
<span style="color: #008080;">elsif</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'?'</span> <span style="color: #008080;">or</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'h'</span> <span style="color: #008080;">then</span>
else
<span style="color: #000000;">showhelp</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span>
ch = find(ch,{UP,DOWN,LEFT,RGHT})
<span style="color: if ch then#008080;">else</span>
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">UP</span><span style="color: #0000FF;">,</span><span style="color: #000000;">DOWN</span><span style="color: #0000FF;">,</span><span style="color: #000000;">LEFT</span><span style="color: #0000FF;">,</span><span style="color: #000000;">RGHT</span><span style="color: #0000FF;">})</span>
ny = y+dy[ch]
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span> <span style="color: #008080;">then</span>
nx = x+dx[ch]
<span style="color: #000000;">ny</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">y</span><span style="color: #0000FF;">+</span><span style="color: #000000;">dy</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">]</span>
if ny>1 and ny<MY
<span style="color: #000000;">nx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">x</span><span style="color: #0000FF;">+</span><span style="color: #000000;">dx</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">]</span>
and nx>1 and nx<MX then
<span style="color: #008080;">if</span> <span style="color: #000000;">ny</span><span style="color: #0000FF;">></span><span style="color: #000000;">1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">ny</span><span style="color: #0000FF;"><</span><span style="color: #000000;">MY</span>
ch = grid[ny][nx]
<span style="color: #008080;">and</span> <span style="color: #000000;">nx</span><span style="color: #0000FF;">></span><span style="color: #000000;">1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">nx</span><span style="color: #0000FF;"><</span><span style="color: #000000;">MX</span> <span style="color: #008080;">then</span>
if ch=DOOR_WING_VERTICAL
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ny</span><span style="color: #0000FF;">][</span><span style="color: #000000;">nx</span><span style="color: #0000FF;">]</span>
or ch=DOOR_WING_HORIZONTAL then
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">DOOR_WING_VERTICAL</span>
grid[y][x] = WAY -- (temp. "ghost" him)
<span style="color: #008080;">or</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">DOOR_WING_HORIZONTAL</span> <span style="color: #008080;">then</span>
rotate_door(ny,nx)
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WAY</span> <span style="color: #000080;font-style:italic;">-- (temp. "ghost" him)</span>
grid[y][x] = HERO
<span style="color: #000000;">rotate_door</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ny</span><span style="color: #0000FF;">,</span><span style="color: #000000;">nx</span><span style="color: #0000FF;">)</span>
ch = grid[ny][nx] -- (maybe unaltered)
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">HERO</span>
elsif ch=MONSTER then
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ny</span><span style="color: #0000FF;">][</span><span style="color: #000000;">nx</span><span style="color: #0000FF;">]</span> <span style="color: #000080;font-style:italic;">-- (maybe unaltered)</span>
grid[y][x] = WAY
<span style="color: #008080;">elsif</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">MONSTER</span> <span style="color: #008080;">then</span>
grid[ny][nx] = DEAD_HERO
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WAY</span>
y = ny
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ny</span><span style="color: #0000FF;">][</span><span style="color: #000000;">nx</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">DEAD_HERO</span>
x = nx
<span style="color: #000000;">y</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">ny</span>
exit
<span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">nx</span>
elsif ch=TREASURE then
treasure_counter +<span style="color: 1#008080;">exit</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">TREASURE</span> <span style="color: #008080;">then</span>
if treasure_counter=TREASUREDB then
<span style="color: #000000;">treasure_counter</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
terminate = true
<span style="color: #008080;">if</span> <span style="color: #000000;">treasure_counter</span><span style="color: #0000FF;">=</span><span style="color: #000000;">TREASUREDB</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">terminate</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span>
ch = WAY
elsif ch <span style="color: #008080;">end</span> <span style=BOMB"color: then#008080;">if</span>
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WAY</span>
bombs += 1
<span style="color: #008080;">elsif</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">BOMB</span> <span style="color: #008080;">then</span>
ch = WAY
<span style="color: #000000;">bombs</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
end if
<span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WAY</span>
if ch=WAY
or ch<span style="color: #008080;">end</span> <span style=WEAK_MONSTER"color: then#008080;">if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">WAY</span>
grid[y][x] = WAY
<span style="color: #008080;">or</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">WEAK_MONSTER</span> <span style="color: #008080;">then</span>
grid[ny][nx] = HERO
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WAY</span>
y = ny
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ny</span><span style="color: #0000FF;">][</span><span style="color: #000000;">nx</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">HERO</span>
x = nx
<span style="color: #000000;">y</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">ny</span>
end if
<span style="color: #000000;">x</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">nx</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end while
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
terminate = true
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
while get_key()!=-1 do end while -- (purge kbd buffer)
<span style="color: #000000;">terminate</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span>
end procedure
<span style="color: #008080;">while</span> <span style="color: #7060A8;">get_key</span><span style="color: #0000FF;">()!=-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span> <span style="color: #008080;">end</span> <span style="color: #008080;">while</span> <span style="color: #000080;font-style:italic;">-- (purge kbd buffer)</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
integer sy, sx, monster_y, monster_x
 
<span style="color: #004080;">integer</span> <span style="color: #000000;">sy</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">sx</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">monster_y</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">monster_x</span>
function monster_step_finder()
monster_y = 0
<span style="color: #008080;">function</span> <span style="color: #000000;">monster_step_finder</span><span style="color: #0000FF;">()</span>
monster_x = 0
<span style="color: #000000;">monster_y</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
sequence m = shuffle(tagset(4))
<span style="color: #000000;">monster_x</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
for i=1 to length(m) do
<span style="color: #004080;">sequence</span> <span style="color: #000000;">m</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">shuffle</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">tagset</span><span style="color: #0000FF;">(</span><span style="color: #000000;">4</span><span style="color: #0000FF;">))</span>
integer ny = sy+dy[i],
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">m</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
nx = sx+dx[i]
<span style="color: #004080;">integer</span> <span style="color: #000000;">ny</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">sy</span><span style="color: #0000FF;">+</span><span style="color: #000000;">dy</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span>
if ny>=1 and ny<=MY
<span style="color: #000000;">nx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">sx</span><span style="color: #0000FF;">+</span><span style="color: #000000;">dx</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
and nx>=1 and nx<=MX
<span style="color: #008080;">if</span> <span style="color: #000000;">ny</span><span style="color: #0000FF;">>=</span><span style="color: #000000;">1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">ny</span><span style="color: #0000FF;"><=</span><span style="color: #000000;">MY</span>
and find(grid[ny][nx],{WAY,HERO}) then
<span style="color: #008080;">and</span> <span style="color: #000000;">nx</span><span style="color: #0000FF;">>=</span><span style="color: #000000;">1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">nx</span><span style="color: #0000FF;"><=</span><span style="color: #000000;">MX</span>
monster_y = ny
<span style="color: #008080;">and</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">ny</span><span style="color: #0000FF;">][</span><span style="color: #000000;">nx</span><span style="color: #0000FF;">],{</span><span style="color: #000000;">WAY</span><span style="color: #0000FF;">,</span><span style="color: #000000;">HERO</span><span style="color: #0000FF;">})</span> <span style="color: #008080;">then</span>
monster_x = nx
<span style="color: #000000;">monster_y</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">ny</span>
return true
<span style="color: #000000;">monster_x</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">nx</span>
end if
<span style="color: #008080;">return</span> <span style="color: #004600;">true</span>
end for
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
return false
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end function
<span style="color: #008080;">return</span> <span style="color: #004600;">false</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
procedure monster_move()
while not terminate do
<span style="color: #008080;">procedure</span> <span style="color: #000000;">monster_move</span><span style="color: #0000FF;">()</span>
integer active = rand(NUMBER_OF_MONSTERS)
<span style="color: #008080;">while</span> <span style="color: #008080;">not</span> <span style="color: #000000;">terminate</span> <span style="color: #008080;">do</span>
sx = sxkoord[active]
<span style="color: #004080;">integer</span> <span style="color: #000000;">active</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">NUMBER_OF_MONSTERS</span><span style="color: #0000FF;">)</span>
sy = sykoord[active]
<span style="color: #000000;">sx</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">sxkoord</span><span style="color: #0000FF;">[</span><span style="color: #000000;">active</span><span style="color: #0000FF;">]</span>
if sx then
<span style="color: #000000;">sy</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">sykoord</span><span style="color: #0000FF;">[</span><span style="color: #000000;">active</span><span style="color: #0000FF;">]</span>
integer ch = grid[sy][sx]
<span style="color: #008080;">if</span> <span style="color: #000000;">sx</span> <span style="color: #008080;">then</span>
if ch=MONSTER then
<span style="color: #004080;">integer</span> <span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sy</span><span style="color: #0000FF;">][</span><span style="color: #000000;">sx</span><span style="color: #0000FF;">]</span>
if rand(MONSTER_WEAKNESS_PROBABILITY)=1 then
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">MONSTER</span> <span style="color: #008080;">then</span>
grid[sy][sx] = WEAK_MONSTER
<span style="color: #008080;">if</span> <span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">MONSTER_WEAKNESS_PROBABILITY</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span>
elsif monster_step_finder() then
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sy</span><span style="color: #0000FF;">][</span><span style="color: #000000;">sx</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WEAK_MONSTER</span>
if grid[monster_y][monster_x]=HERO then
<span style="color: #008080;">elsif</span> <span style="color: #000000;">monster_step_finder</span><span style="color: #0000FF;">()</span> <span style="color: #008080;">then</span>
grid[monster_y][monster_x]=DEAD_HERO
<span style="color: #008080;">if</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">monster_y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">monster_x</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">HERO</span> <span style="color: #008080;">then</span>
terminate = true
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">monster_y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">monster_x</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">DEAD_HERO</span>
exit
<span style="color: #000000;">terminate</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span>
end if
grid[sy][sx] <span style="color: WAY#008080;">exit</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
grid[monster_y][monster_x] = MONSTER
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sy</span><span style="color: #0000FF;">][</span><span style="color: #000000;">sx</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WAY</span>
sxkoord[active] = monster_x
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">monster_y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">monster_x</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">MONSTER</span>
sykoord[active] = monster_y
<span style="color: #000000;">sxkoord</span><span style="color: #0000FF;">[</span><span style="color: #000000;">active</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">monster_x</span>
end if
<span style="color: #000000;">sykoord</span><span style="color: #0000FF;">[</span><span style="color: #000000;">active</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">monster_y</span>
elsif ch=WEAK_MONSTER then
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
if rand(MONSTER_INTENSIFIES_PROBABILITY)=1 then
<span style="color: #008080;">elsif</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #000000;">WEAK_MONSTER</span> <span style="color: #008080;">then</span>
grid[sy][sx] = MONSTER
<span style="color: #008080;">if</span> <span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">MONSTER_INTENSIFIES_PROBABILITY</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span>
elsif monster_step_finder() then
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sy</span><span style="color: #0000FF;">][</span><span style="color: #000000;">sx</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">MONSTER</span>
grid[sy][sx] = WAY
<span style="color: #008080;">elsif</span> <span style="color: #000000;">monster_step_finder</span><span style="color: #0000FF;">()</span> <span style="color: #008080;">then</span>
if grid[monster_y][monster_x]!=HERO then
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">sy</span><span style="color: #0000FF;">][</span><span style="color: #000000;">sx</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">WAY</span>
grid[monster_y][monster_x]=WEAK_MONSTER
<span style="color: #008080;">if</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">monster_y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">monster_x</span><span style="color: #0000FF;">]!=</span><span style="color: #000000;">HERO</span> <span style="color: #008080;">then</span>
sxkoord[active] = monster_x
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">monster_y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">monster_x</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">WEAK_MONSTER</span>
sykoord[active] = monster_y
<span style="color: #000000;">sxkoord</span><span style="color: #0000FF;">[</span><span style="color: #000000;">active</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">monster_x</span>
else
<span style="color: #000000;">sykoord</span><span style="color: #0000FF;">[</span><span style="color: #000000;">active</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">monster_y</span>
sxkoord[active] = 0
<span sykoord[active] style="color: 0#008080;">else</span>
<span style="color: #000000;">sxkoord</span><span style="color: #0000FF;">[</span><span style="color: #000000;">active</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
end if
<span style="color: #000000;">sykoord</span><span style="color: #0000FF;">[</span><span style="color: #000000;">active</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
task_yield()
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end while
<span style="color: #000000;">task_yield</span><span style="color: #0000FF;">()</span>
end procedure
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
generatemaze()
grid[y][x] = HERO
<span style="color: #000000;">generatemaze</span><span style="color: #0000FF;">()</span>
integer draw_id = task_create(draw,{}),
<span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">HERO</span>
mstr_id = task_create(monster_move,{})
<span style="color: #004080;">integer</span> <span style="color: #000000;">draw_id</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">task_create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">draw</span><span style="color: #0000FF;">,{}),</span>
task_schedule(draw_id,{0.2,0.2})
<span style="color: #000000;">mstr_id</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">task_create</span><span style="color: #0000FF;">(</span><span style="color: #000000;">monster_move</span><span style="color: #0000FF;">,{})</span>
task_schedule(mstr_id,{0.1,0.1})
<span style="color: #000000;">task_schedule</span><span style="color: #0000FF;">(</span><span style="color: #000000;">draw_id</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">0.2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0.2</span><span style="color: #0000FF;">})</span>
 
<span style="color: #000000;">task_schedule</span><span style="color: #0000FF;">(</span><span style="color: #000000;">mstr_id</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">0.1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0.1</span><span style="color: #0000FF;">})</span>
keyboard()
 
<span style="color: #000000;">keyboard</span><span style="color: #0000FF;">()</span>
if treasure_counter=TREASUREDB then
puts(1,"YOU WON! Congratulations!\n")
<span style="color: #008080;">if</span> <span style="color: #000000;">treasure_counter</span><span style="color: #0000FF;">=</span><span style="color: #000000;">TREASUREDB</span> <span style="color: #008080;">then</span>
{} = wait_key()
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"YOU WON! Congratulations!\n"</span><span style="color: #0000FF;">)</span>
elsif grid[y][x]=DEAD_HERO then
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">()</span>
puts(1,"YOU PERISHED!\n")
<span style="color: #008080;">elsif</span> <span style="color: #000000;">grid</span><span style="color: #0000FF;">[</span><span style="color: #000000;">y</span><span style="color: #0000FF;">][</span><span style="color: #000000;">x</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">DEAD_HERO</span> <span style="color: #008080;">then</span>
{} = wait_key()
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"YOU PERISHED!\n"</span><span style="color: #0000FF;">)</span>
end if</lang>
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">()</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<!--</lang>-->
 
=={{header|Wren}}==
7,818

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.