Среда разработки: Turbo Pascal 7.1
uses crt; const maxx=12; maxy=7; var map: array [1..maxx,1..maxy] of byte; x,y,manx,many:byte; c,m:char; {-------------------------------} procedure doroga(x,y:byte); begin textcolor(brown); gotoxy(x,y); write('====='); gotoxy(x,y+1); write('====='); gotoxy(x,y+2); write('====='); end; {-------------------------------} procedure elka(x,y:byte); begin textcolor(green); gotoxy(x,y); write(' | '); gotoxy(x,y+1); write(' /|\ '); gotoxy(x,y+2); write('//|\\'); end; {-------------------------------} procedure man(x,y:byte); begin textcolor(white); gotoxy(x,y); write(' O '); gotoxy(x,y+1); write(']-|-['); gotoxy(x,y+2); write('_/ \_'); end; {-------------------------------} procedure more(x,y:byte); begin textcolor(blue); gotoxy(x,y); write('~~~~~'); gotoxy(x,y+1); write('~~~~~'); gotoxy(x,y+2); write('~~~~~'); end; {-------------------------------} procedure palma(x,y:byte); begin textcolor(brown); gotoxy(x,y); write(' (#) '); gotoxy(x,y+1); write('( # )'); gotoxy(x,y+2); write('__#__'); end; {-------------------------------} procedure korabl(x,y:byte); begin textcolor(white); gotoxy(x,y); write(' |) '); gotoxy(x,y+1); write(' |_) '); gotoxy(x,y+2); write('\___/'); end; {-------------------------------} procedure generate_map; begin randomize; for x:=1 to maxx do for y:=1 to maxy do map[x,y]:=random(2); end; {-------------------------------} begin clrscr; generate_map; textcolor(yellow); m:='l'; gotoxy(5,25); write('['#25','#24','#27','#26,'] -- управление [Esc] -- выход [m] -- лес/море'); repeat manx:=random(maxx)+1; many:=random(maxy)+1; until (map[manx,many]=0) and ((map[manx+1,many]=0) or (map[manx-1,many]=0) or (map[manx,many+1]=0) or (map[manx+1,many-1]=0)); repeat for x:=1 to maxx do for y:=1 to maxy do case m of 'l': begin man(manx*6,many*3); case map[x,y] of 0: doroga(x*6,y*3); 1: elka(x*6,y*3); end; end; 'm': begin korabl(manx*6,many*3); case map[x,y] of 0: more(x*6,y*3); 1: palma(x*6,y*3); end; end; end; c:=readkey; case c of #72: if (many-1>0) and (map[manx,many-1]=0) then dec(many); #80: if (many+1<=maxy) and (map[manx,many+1]=0) then inc(many); #77: if (manx+1<=maxx) and (map[manx+1,many]=0) then inc(manx); #75: if (manx-1>0) and (map[manx-1,many]=0) then dec(manx); 'm': if m='l' then m:='m' else m:='l' end until c=#27; end.