GRY-Online.pl --> Archiwum Forum

programowanie: gra w pascalu - swego rodzaju pacman?

24.03.2009
20:34
[1]

hipppciu [ Konsul ]

programowanie: gra w pascalu - swego rodzaju pacman?

mam prośbę.
jako zadanie na programowanie, mam zrobić grę. w spoilerze jest podany kod, który dotychczas zrobiłem.
chodzi o to, by powstał labirynt i pojawiły się losowo jakieś kropeczki, które duszek będzie musiał zbierać.
tutaj moje pytania - czy potrafiłby ktoś napisać taki algorytm, pętlę, cokolwiek by:
- kropeczki pojawiały się losowo i zniknęły po 'wejsciu' na nie
- ściany labiryntu również się losowały, jednak tak, by była 100% możliwość dotarcia do owych kropeczek
pomoże ktoś?

spoiler start
uses crt;

const X=15;
POZIOM=30;

var tab: array[1..X,1..POZIOM] of integer;
ruch: string;
pozycja_x,pozycja_y,koniec_gry: integer;
duszek_x,duszek_y: integer;
duszek2_x,duszek2_y: integer;

procedure wyzeruj_tablice;
var aa,bb:integer;
begin
for aa:=1 to X do
for bb:=1 to X do
tab[aa,bb]:=0;
for aa:=1 to X do tab[aa,1]:=1;
for aa:=1 to X do tab[aa,POZIOM]:=1;

for bb:=1 to POZIOM do tab[1,bb]:=1;
for bb:=1 to POZIOM do tab[X,bb]:=1;

for aa:=2 to 3 do tab[aa,4]:=1;
for bb:=4 to 6 do tab[4,bb]:=1;

for bb:=2 to 6 do tab[6,bb]:=1;

end;

procedure narysuj_tablice;
var aa,bb: integer;
begin
gotoxy(1,1);
textcolor(lightred);
writeln('pozdrowienia dla Pana Dominika :)');
textcolor(white);
writeln;
for aa:=1 to X do
begin
for bb:=1 to POZIOM do
begin
if tab[aa,bb]=0 then write(' '); textcolor(lightgray);
if tab[aa,bb]=1 then write(chr(219)); textcolor(lightblue);
if tab[aa,bb]=3 then write(chr(2)); textcolor(yellow);
if tab[aa,bb]=4 then write(chr(1));
textcolor(white);
end;
writeln;
end;
end;

procedure bzyk2;
begin
sound(200);
delay(50);
nosound;
end;

procedure bzyk3;
begin
sound(800);
delay(50);
nosound;
end;


procedure klawisz;
var ch: char;
begin
repeat
if keypressed then
begin
ch:=readkey;
bzyk2;
end;
until not keypressed;
if ch='k' then koniec_gry:=1;
if ch='w' then ruch:='gora';
if ch='s' then ruch:='dol';
if ch='d' then ruch:='prawo';
if ch='a' then ruch:='lewo';
end;

procedure wstaw_goscia;
begin
tab[pozycja_x,pozycja_y]:=3;
end;

procedure wstaw_duszka;
begin
tab[duszek_x,duszek_y]:=4;
end;

procedure wstaw_duszka2;
begin
tab[duszek2_x,duszek2_y]:=4;
end;


procedure przesun_na_dol;
begin
if tab[pozycja_x+1,pozycja_y]=0 then
begin
pozycja_x:=pozycja_x+1;
wstaw_goscia;
tab[pozycja_x-1,pozycja_y]:=0;
end;
end;

procedure przesun_do_gory;
begin
if tab[pozycja_x-1,pozycja_y]=0 then
begin
pozycja_x:=pozycja_x-1;
wstaw_goscia;
tab[pozycja_x+1,pozycja_y]:=0;
end;
end;

procedure przesun_w_prawo;
begin
if tab[pozycja_x,pozycja_y+1]=0 then
begin
pozycja_y:=pozycja_y+1;
wstaw_goscia;
tab[pozycja_x,pozycja_y-1]:=0;
end;
end;

procedure przesun_w_lewo;
begin
if tab[pozycja_x,pozycja_y-1]=0 then
begin
pozycja_y:=pozycja_y-1;
wstaw_goscia;
tab[pozycja_x,pozycja_y+1]:=0;
end;
end;

procedure duszek_przesun_na_dol;
begin
if tab[duszek_x+1,duszek_y]=0 then
begin
duszek_x:=duszek_x+1;
wstaw_duszka;
tab[duszek_x-1,duszek_y]:=0;
end;
end;

procedure duszek_przesun_do_gory;
begin
if tab[duszek_x-1,duszek_y]=0 then
begin
duszek_x:=duszek_x-1;
wstaw_duszka;
tab[duszek_x+1,duszek_y]:=0;
end;
end;

procedure duszek_przesun_w_prawo;
begin
if tab[duszek_x,duszek_y+1]=0 then
begin
duszek_y:=duszek_y+1;
wstaw_duszka;
tab[duszek_x,duszek_y-1]:=0;
end;
end;

procedure duszek_przesun_w_lewo;
begin
if tab[duszek_x,duszek_y-1]=0 then
begin
duszek_y:=duszek_y-1;
wstaw_duszka;
tab[duszek_x,duszek_y+1]:=0;
end;
end;


procedure duszek2_przesun_na_dol;
begin
if tab[duszek2_x+1,duszek2_y]=0 then
begin
duszek2_x:=duszek2_x+1;
wstaw_duszka2;
tab[duszek2_x-1,duszek2_y]:=0;
end;
end;

procedure duszek2_przesun_do_gory;
begin
if tab[duszek2_x-1,duszek2_y]=0 then
begin
duszek2_x:=duszek2_x-1;
wstaw_duszka2;
tab[duszek2_x+1,duszek2_y]:=0;
end;
end;

procedure duszek2_przesun_w_prawo;
begin
if tab[duszek2_x,duszek2_y+1]=0 then
begin
duszek2_y:=duszek2_y+1;
wstaw_duszka2;
tab[duszek2_x,duszek2_y-1]:=0;
end;
end;

procedure duszek2_przesun_w_lewo;
begin
if tab[duszek2_x,duszek2_y-1]=0 then
begin
duszek2_y:=duszek2_y-1;
wstaw_duszka2;
tab[duszek2_x,duszek2_y+1]:=0;
end;
end;


procedure gon_go;
var aa: integer;
begin
if random(POZIOM)<>2 then
begin
‹ruch losowy›
bzyk3;
aa:=random(5);
if aa=1 then ruch:='gora';
if aa=2 then ruch:='dol';
if aa=3 then ruch:='prawo';
if aa=4 then ruch:='lewo';
end
else
begin
‹sztuczna inteligencja›
if pozycja_x<duszek_x then ruch:='gora';
if pozycja_x>duszek_x then ruch:='dol';
if pozycja_y<duszek_y then ruch:='lewo';
if pozycja_y>duszek_y then ruch:='prawo';
end;
end;


procedure gon_go2;
var aa: integer;
begin
if random(POZIOM)<>2 then
begin
‹ruch losowy›
bzyk2;
aa:=random(5);
if aa=1 then ruch:='gora';
if aa=2 then ruch:='dol';
if aa=3 then ruch:='prawo';
if aa=4 then ruch:='lewo';
end
else
begin
‹sztuczna inteligencja›
if pozycja_x<duszek2_x then ruch:='gora';
if pozycja_x>duszek2_x then ruch:='dol';
if pozycja_y<duszek2_y then ruch:='lewo';
if pozycja_y>duszek2_y then ruch:='prawo';
end;
end;

begin
randomize;
clrscr;
wyzeruj_tablice;
narysuj_tablice;
koniec_gry:=0;
pozycja_x:=2;
pozycja_y:=2;
duszek_x:=X-1;
duszek_y:=2;
duszek2_x:=2;
duszek2_y:=POZIOM-2;
wstaw_goscia;
wstaw_duszka;
wstaw_duszka2;


repeat
klawisz;
if ruch='dol' then przesun_na_dol;
if ruch='gora' then przesun_do_gory;
if ruch='lewo' then przesun_w_lewo;
if ruch='prawo' then przesun_w_prawo;

gon_go;
if ruch='dol' then duszek_przesun_na_dol;
if ruch='gora' then duszek_przesun_do_gory;
if ruch='lewo' then duszek_przesun_w_lewo;
if ruch='prawo' then duszek_przesun_w_prawo;

gon_go2;
if ruch='dol' then duszek2_przesun_na_dol;
if ruch='gora' then duszek2_przesun_do_gory;
if ruch='lewo' then duszek2_przesun_w_lewo;
if ruch='prawo' then duszek2_przesun_w_prawo;

if (pozycja_x+1=duszek_x) and (pozycja_y=duszek_y)
then koniec_gry:=1;
if (pozycja_x-1=duszek_x) and (pozycja_y=duszek_y)
then koniec_gry:=1;
if (pozycja_x=duszek_x) and (pozycja_y+1=duszek_y)
then koniec_gry:=1;
if (pozycja_x=duszek_x) and (pozycja_y-1=duszek_y)
then koniec_gry:=1;
if (pozycja_x+1=duszek2_x) and (pozycja_y=duszek2_y)
then koniec_gry:=1;
if (pozycja_x-1=duszek2_x) and (pozycja_y=duszek2_y)
then koniec_gry:=1;
if (pozycja_x=duszek2_x) and (pozycja_y+1=duszek2_y)
then koniec_gry:=1;
if (pozycja_x=duszek2_x) and (pozycja_y-1=duszek2_y)
then koniec_gry:=1;


if (pozycja_x=X-1) and (pozycja_y=POZIOM-1) then
begin
koniec_gry:=1;
writeln('BRAWO!');
end;

ruch:='nic';
narysuj_tablice;
until koniec_gry=1;


readln;
end.

spoiler stop

24.03.2009
20:37
[2]

blazerx [ ]

Uzyj tego:

24.03.2009
20:53
[3]

hipppciu [ Konsul ]

dzięki, edytować już niestety nie mogę.

25.03.2009
18:35
[4]

hipppciu [ Konsul ]

up?

© 2000-2025 GRY-OnLine S.A.