Код:
program lode_runner;
const
volume_devils=7;
treasures_max=5;
xmax=32;
ymax=22;
var
i,j : byte;
map: array[1..22,1..32] of byte =[
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,3,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,3,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,3,0,0,0,1,1,3,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,3,0,0,0,1,1,3,0,0,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,3,0,0,0,1,1,3,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,3,0,0,0,1,1,3,0,0,0,0,0,0,0,0,0,5,3,0,0,0,0,0,0,0,
1,3,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,
0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,
0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,
0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,3,4,4,4,4,4,4,4,3,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,3,
0,0,0,0,0,0,0,0,0,5,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,5,0,0,0,0,0,3,
0,0,0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,3,
0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,3,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
{0-проход, 1-кирпич неуничтожимый, 2-кирпич уничтожимый,
3-лестница, 4-канат, 5-сундук, 6-герой, 7-черт}
x_hero: byte = 17;
y_hero: byte = 19;
treasures_hero: byte = 0;
devil: array[1..7,1..3] of byte
=[1,1,1, 17,6,2, 32,6,3, 17,9,4, 32,9,1, 6,13,2, 32,18,3];
key1,key2: byte;
x_devil,y_devil,d_devil,flag1: byte;
begin
border(0);
textbackground(0);
textcolor(6);
VirtScreenClear;
gotoxy(0,22);
write('TREASURES: ',treasures_hero);
textcolor(4);
gotoxy(0,23);
write('Demo Game of ZX Like Pascal');
textcolor(6);
MapSet(map,map_sprites,0,0,32,22);
repeat
MapPut1x1(1,1);
SpritePutClear(HERO_SPRITE,x_hero-1,y_hero-1);
for i:=1 to volume_devils do
SpritePutClear(DEVIL_SPRITE,devil[i,1]-1,devil[i,2]-1);
VirtScreenPut;
ReadKey(key1,key2);
if y_hero<ymax then
if map[y_hero,x_hero]<>4 and map[y_hero,x_hero]<>3 then
if map[y_hero+1,x_hero]=0 then
begin
y_hero:=y_hero+1;
key1:=0;
end;
case key1 of
79:
if x_hero>1 then
if map[y_hero,x_hero-1]<>1 and map[y_hero,x_hero-1]<>2
then x_hero:=x_hero-1;
80:
if x_hero<xmax then
if map[y_hero,x_hero+1]<>1 and map[y_hero,x_hero+1]<>2
then x_hero:=x_hero+1;
81:
if y_hero>1 then
if map[y_hero,x_hero]=3
then y_hero:=y_hero-1;
65:
if y_hero<ymax then
if map[y_hero+1,x_hero]=0 or map[y_hero+1,x_hero]=3 or map[y_hero+1,x_hero]=4
then y_hero:=y_hero+1;
end;
if map[y_hero,x_hero]=5 then
begin
SoundEffect(1,100,255);
map[y_hero,x_hero]:=0;
treasures_hero:=treasures_hero+1;
gotoxy(0,22);
write('TREASURES: ',treasures_hero);
end;
for i:=1 to volume_devils do
begin
flag1:=0;
x_devil:=devil[i,1];
y_devil:=devil[i,2];
d_devil:=devil[i,3];
if y_devil<ymax then
if map[y_devil,x_devil]<>4 and map[y_devil,x_devil]<>3 then
if map[y_devil+1,x_devil]=0 then
begin
y_devil:=y_devil+1;
flag1:=1;
end;
if flag1=0 and d_devil=1 then
if x_devil>1 then
if map[y_devil,x_devil-1]<>1 and map[y_devil,x_devil-1]<>2 then
begin
x_devil:=x_devil-1;
flag1:=1;
end;
if flag1=0 and d_devil=3 then
if x_devil<xmax then
if map[y_devil,x_devil+1]<>1 and map[y_devil,x_devil+1]<>2 then
begin
x_devil:=x_devil+1;
flag1:=1;
end;
if flag1=0 and d_devil=2 then
if y_devil>1 then
if map[y_devil,x_devil]=3 then
begin
y_devil:=y_devil-1;
flag1:=1;
end;
if flag1=0 and d_devil=4 then
if y_devil<ymax then
if map[y_devil+1,x_devil]=0 or map[y_devil+1,x_devil]=3 or map[y_devil+1,x_devil]=4 then
begin
y_devil:=y_devil+1;
flag1:=1;
end;
if flag1=0 then
begin
d_devil:=d_devil+1;
if d_devil>4 then d_devil:=1;
end;
devil[i,1]:=x_devil;
devil[i,2]:=y_devil;
devil[i,3]:=d_devil;
end;
until treasures_hero=treasures_max;
ScreenThaw;
VirtScreenClear;
gotoxy(28,12);
write('ПОБЕДА!');
VirtScreenPut;
end.
MAP_SPRITES
defb 0, #00,#00,#00,#00,#00,#00,#00,#00
defb 2, #00,#fb,#fb,#fb,#00,#df,#df,#df
defb 2, #00,#fb,#fb,#fb,#00,#df,#df,#df
defb 7, #42,#42,#7e,#42,#42,#42,#7e,#42
defb 7, #00,#ff,#00,#00,#00,#00,#00,#00
defb 6, #00,#38,#2c,#7e,#42,#42,#7e,#00
HERO_SPRITE
defb 1
defb 0,0,71, #5a,#52,#3c,#10,#10,#18,#14,#14
DEVIL_SPRITE
defb 1
defb 0,0,3, #5a,#52,#3c,#10,#10,#18,#14,#14