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++)
Pascal labirynt
-
- 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
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
Pascal labirynt
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ć.
Pascal labirynt
probowalem cos sam zdzialac ale sa jeszcze pewne blady jakby byl ktos tak mily i popatrzyl na to i mogl to naprawic bylbym wdzieczny
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.
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.