|
BLUDISKO - realizácia
Pascal
program bludisko;
uses crt;
const stena : char = 'X'; { 1 v matici } stopa : char = '.'; robot : char = 'O'; ciel : char = 'I'; { 9 v matici }
MAX = 20; { rozmer stvorcovej matice }
{ !!! matica je transponovana tak pozor na to !!! }
plocha : array[1..MAX, 1..MAX] of byte = (
(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1), (1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1), (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), (1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1), (1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1), (1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1), (1,0,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1), (1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1), (1,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1), (1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1), (1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1), (1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1), (1,1,1,1,1,1,1,1,1,0,0,1,0,1,0,0,0,0,0,1), (1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1), (1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1), (1,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1), (1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1), (1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1), (1,0,1,0,0,0,9,0,0,0,0,1,0,0,0,0,0,0,0,1), (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
);
var key : char; x, y, x_c, y_c, smer : byte; { 1-sever, 2-vychod, 3-juh, 4-zapad }
procedure vykresli_plochu; var x_i, y_i : byte; begin clrscr; textcolor(Red); for y_i:=1 to MAX do for x_i:=1 to MAX do begin if plocha[x_i, y_i]=1 then begin gotoxy(x_i, y_i); write(stena); end; if plocha[x_i, y_i]=9 then begin textcolor(LightBlue); gotoxy(x_i, y_i); write(ciel); x_c:=x_i; y_c:=y_i; textcolor(Red); end; end; textcolor(Green); gotoxy(MAX+5, 1); write('BLUDISKO - algoritmus pravej ruky'); gotoxy(MAX+12, 3); write('q - quit'); textcolor(LightGreen); gotoxy(2, MAX-1); write(robot); gotoxy(2, MAX-1); end;
procedure krok(x_old, y_old, x_new, y_new : byte); begin if (x_old<>x_c) or (y_old<>y_c) then begin gotoxy(x_old, y_old); write(stopa); end; gotoxy(x_new, y_new); write(robot); gotoxy(x_new, y_new); { nach kurzor netrci kade tade } x:=x_new; y:=y_new; if plocha[x, y]=9 then begin textcolor(LightBlue); write('W'); gotoxy(MAX+12, 5); write('c - continue'); gotoxy(x, y); key:=' '; while key<>'c' do begin key:=readkey; end; gotoxy(MAX+12, 5); clreol; gotoxy(x, y); write(ciel); textcolor(LightGreen); end; end;
begin vykresli_plochu; x:=2; y:=MAX-1; smer:=1; key:=' '; while key<>'q' do begin delay(30000); { nuz 30 sekund to nebude ale co uz } if keypressed then key:=readkey; case smer of 1 : if plocha[x+1, y]<>1 then begin krok(x, y, x+1, y); smer:=2 end else begin if plocha[x, y-1]<>1 then begin krok(x, y, x, y-1); smer:=1 end else smer:=4; end; 2 : if plocha[x, y+1]<>1 then begin krok(x, y, x, y+1); smer:=3 end else begin if plocha[x+1, y]<>1 then begin krok(x, y, x+1, y); smer:=2 end else smer:=1; end; 3 : if plocha[x-1, y]<>1 then begin krok(x, y, x-1, y); smer:=4 end else begin if plocha[x, y+1]<>1 then begin krok(x, y, x, y+1); smer:=3 end else smer:=2; end; 4 : if plocha[x, y-1]<>1 then begin krok(x, y, x, y-1); smer:=1 end else begin if plocha[x-1, y]<>1 then begin krok(x, y, x-1, y); smer:=4 end else smer:=3; end; end; end; gotoxy(1, MAX+3); textcolor(LightGray); normvideo; end.
|