Pascal labirynt

qiotrek
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 30 lis 2009, o 09:24
Płeć: Mężczyzna
Lokalizacja: LIMANOWA

Pascal labirynt

Post autor: qiotrek »

witam,
ma problem z pewnym zadaniem: musze zrobic labirynt (w trybie txt) sciany jako X i ma sie po nim poruszac jakis obiekt. Ten obiekt ma sam znalezc droge i ja jakos zaznaczyc.
Labirynt juz mam ale nie moge jakos stowrzyc algorytmu, który bedzie sterowac tym obiektem.
Byłbym bardzo wdzięczny za wskazówkę.
(ostatecznie zadanie może zostać napisane w C++)
snajper0208
Użytkownik
Użytkownik
Posty: 128
Rejestracja: 26 paź 2008, o 22:24
Płeć: Mężczyzna
Lokalizacja: Wawrzeńczyce
Podziękował: 11 razy
Pomógł: 14 razy

Pascal labirynt

Post autor: snajper0208 »

może być z planszami wczytywanymi z pliku txt ?
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Pascal labirynt

Post autor: kadiii »

Jeżeli ma to być symulacja rzeczywistego przechodzenia labiryntu przez obiekt, czyli takiego, w którym nie ma możliwości przeglądu układu labiryntu to można użyć regułę lewej/prawej dłoni(nie zawsze znajdzie rozwiązanie) lub zwykłego bruta. Inne algorytmy takie jak np. algorytmy Dijkstry, Bellmana i ich modyfikacje wymagają mapowania labiryntu, ale jeśli możesz takowego użyć to jak najbardziej warto to zrobić.
qiotrek
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 30 lis 2009, o 09:24
Płeć: Mężczyzna
Lokalizacja: LIMANOWA

Pascal labirynt

Post autor: qiotrek »

probowalem cos sam zdzialac ale sa jeszcze pewne blady jakby byl ktos tak mily i popatrzyl na to i mogl to naprawic bylbym wdzieczny

Kod: Zaznacz cały

program tabilce;
uses crt;
const a=9; b=9;

type
tablica=array [0..a,0..b] of char;
var
t1:tablica;
t2:tablica;

procedure labirynt1 (var t:tablica);
var
w,i,x,y:integer;
begin
i:=1;
 for w:=0 to a do
  begin
   t[0,w]:='X';   t[w,0]:='X';    t[a,w]:='X';     t[w,b]:='X';
  end;

   for w:=1 to 8 do
    for i:=1 to 8 do
  begin
   t[i,w]:=' ';
  end;

 t[a-9,b-8]:='S'; t[a,b-1]:='M';
 t[1,2]:='X'; t[1,3]:='X'; t[1,4]:='X'; t[1,5]:='X';
 t[2,7]:='X'; t[2,8]:='X';
 t[3,2]:='X'; t[3,3]:='X'; t[3,4]:='X'; t[3,5]:='X'; t[3,1]:='X';
 t[4,7]:='X'; t[4,8]:='X';
 t[5,1]:='X'; t[5,3]:='X'; t[5,4]:='X'; t[5,5]:='X'; t[5,6]:='X'; t[5,7]:='X'; t[5,8]:='X';
 t[6,1]:='X';
 t[7,1]:='X'; t[7,3]:='X'; t[7,4]:='X'; t[7,6]:='X'; t[7,7]:='X';
 t[8,1]:='X'; t[8,3]:='X'; t[8,7]:='X';
end;

procedure labirynt2 (var t:tablica);
var
w,i,x,y:integer;
begin
i:=1;
 for w:=0 to a do
  begin
   t[0,w]:='X';   t[w,0]:='X';    t[a,w]:='X';     t[w,b]:='X';
  end;

   for w:=1 to 8 do
    for i:=1 to 8 do
  begin
   t[i,w]:=' ';
  end;

 t[0,b-8]:='M'; t[a,b-1]:='S';

 t[2,1]:='X'; t[2,2]:='X'; t[2,3]:='X'; t[2,4]:='X'; t[2,6]:='X'; t[2,7]:='X'; t[2,8]:='X';
 t[3,6]:='X';
 t[4,1]:='X'; t[4,2]:='X'; t[4,4]:='X'; t[4,5]:='X'; t[4,6]:='X'; t[4,7]:='X';
 t[5,4]:='X'; t[5,7]:='X';
 t[6,1]:='X'; t[6,3]:='X'; t[6,4]:='X'; t[6,5]:='X'; t[6,7]:='X';

 t[8,2]:='X'; t[8,3]:='X'; t[8,4]:='X'; t[8,5]:='X';  t[8,7]:='X';

end;

procedure drukuj(t:tablica);
var
 w,i:integer;
begin
for w:=0 to a do
    begin
    for i:=0 to b do
    write(t[w,i]:2);
    writeln;
    end;
end;

procedure przejdz(var t:tablica;x,y:integer);
var
dpx,dpy,wpx,wpy,ax,ay: integer;
begin
wpx:=x;
wpy:=y+1;
dpx:=x-1;
dpy:=y;

while t[x+1,y]<>'M' do
 begin
   if t[wpx,wpy]<>'X' then
    begin
     t[wpx,wpy]:='o';
     dpx:=x-1;
     dpy:=y;
     wpx:=x;
     wpy:=y+1;
     x:=dpx;
     y:=dpy;
    end
   else
    if t[dpx,dpy]<>'X' then
     begin
      t[dpx,dpy]:='o';
      x:=dpx;
      y:=dpy;
      dpx:=dpx-1;
      wpx:=x;
      wpy:=y+1;
     end
    else
     begin
      dpx:=x;
      dpy:=y-1;
      wpx:=x-1;
      wpy:=y;
     end;
 clrscr;
 drukuj(t2);
 end;

end;

begin
 clrscr;
 labirynt2(t2);
 przejdz(t2,9,8);
 Writeln('LABIRYNT 1');
 drukuj(t2);
 readkey
end.

Jest to napisane w Pascalu.

-- 10 sty 2010, o 16:20 --

widze ze nie ma zbyt duzego zainteresowania ale i tak nie trzeba udalo mi ise wkoncu samemu zrobic.
ODPOWIEDZ