Program pakman; uses crt; var fil:text; Tecla:char; ccy,ccx,sm,cmx,cmy,x,y,ll:integer; mp:array[1..2,1..100] of integer; lb:array [0..100] of string; lb2:array[0..100] of string; Procedure mder; begin If ll=1 then begin lb2[cmy][cmx-19]:='.'; end; If (lb2[cmy][cmx-18]=' ') then begin gotoxy(cmx,cmy); write(' '); cmx:=cmx+1; gotoxy(cmx,cmy); textcolor(red); write('@'); ll:=0; end else sm:=2; ll:=0; end; Procedure mab; begin If ll=1 then begin lb2[cmy][cmx-19]:='.' end; If (lb2[cmy+1][cmx-19]=' ') then begin gotoxy(cmx,cmy); write(' '); cmy:=cmy+1; gotoxy(cmx,cmy); textcolor(red); write('@'); ll:=0; end else sm:=3; ll:=0; end; Procedure miz; begin If ll=1 then begin lb2[cmy][cmx-19]:='.'; end; If (lb2[cmy][cmx-20]=' ') then begin gotoxy(cmx,cmy); write(' '); cmx:=cmx-1; gotoxy(cmx,cmy); textcolor(red); write('@'); ll:=0; end else sm:=4; ll:=0; end; Procedure mar; begin If ll=1 then begin lb2[cmy][cmx-19]:='.' end; If (lb2[cmy-1][cmx-19]=' ') then begin gotoxy(cmx,cmy); write(' '); cmy:=cmy-1; gotoxy(cmx,cmy); textcolor(red); write('@'); ll:=0; end else sm:=1; ll:=0; end; Procedure mvm; begin If (sm=1) then mder; If (sm=2) then mab; If (sm=3) then miz; If (sm=4) then mar; If (ccx=cmx)and(ccy=cmy)then mvm; end; Procedure verif; begin IF (lb2[cmy][cmx-18]=' ') then ll:=ll+1; IF (lb2[cmy][cmx-20]=' ') then ll:=ll+1; If (lb2[cmy+1][cmx-19]=' ') then ll:=ll+1; If (lb2[cmy-1][cmx-19]=' ')then ll:=ll+1; mvm; end; Procedure TC(inicio,fin:byte); Assembler; asm; Mov ah,1 Mov ch, inicio Mov cl, fin Int 10h End; Procedure CursorOff; Begin Tc (32,32); End; procedure Derecha; begin If lb[y][x-18]=' ' then begin gotoxy(x,y); write(' '); x:=x+1; Textcolor(yellow); gotoxy(x,y); write(''); end; verif; end; Procedure Izquierda; begin If lb[y][x-20]=' ' then begin gotoxy(x,y); write(' '); x:=x-1; Textcolor(yellow); gotoxy(x,y); write(''); end; verif; end; Procedure Abajo; begin If lb[y+1][x-19]=' ' then begin gotoxy(x,y); write(' '); y:=y+1; Textcolor(yellow); gotoxy(x,y); write(''); end; verif; end; Procedure Arriba; begin If lb[y-1][x-19]=' ' then begin gotoxy(x,y); write(' '); y:=y-1; Textcolor(yellow); gotoxy(x,y); write(''); end; verif; end; begin TextBackground(LightBlue); CursorOff; clrscr; textcolor(yellow); writeln(' '); writeln('********************************************************************************'); writeln(' Resuelve el laberinto '); writeln('********************************************************************************'); writeln(' Pulse una tecla '); readkey; clrscr; assign(fil,'C:\Lab\lab.txt'); reset(fil); for ll:=1 to 100 do begin readln(fil,lb[ll]); lb2[ll]:=lb[ll]; end; for ll:=1 to 23 do begin Textcolor(Green); gotoxy(20,ll); writeln(lb[ll]); end; cmx:=25; cmy:=12; textcolor(red); gotoxy(cmx,cmy); write('@'); x:=31; y:=12; Textcolor(yellow); gotoxy(x,y); write(''); sm:=1; ll:=0; Repeat Tecla:=readkey; Case Tecla Of #72 :Arriba; #75 :Izquierda; #77 :Derecha; #80 :Abajo; end; Until (Tecla=#59)or(x=31)and(y=21) or(cmx=x)and(cmy=y); Delay(550); If (cmx=x)and(cmy=y)then begin clrscr; gotoxy(30,15); textcolor(red+blink); write('­Perdiste!'); sound(300); delay(1200); nosound; end; If (x=31)and(y=21) then for ll:=1 to 15 do begin Clrscr; textcolor(yellow); gotoxy(30,y); Write('­­Ganaste!!'); Y:=y-1; sound(450); delay (100); nosound; end; end.