Jump to content

Змейка на паскале


Recommended Posts

Привет, народ. Оч. нужно дописать прогу.

Суть проги: змейка движется горизонтально от правого края к левому, постепенно опускаясь вниз. Если она дойдет до пушки, то вы проиграли.

Я запрограммировал движение змеек, пушки, и кое что еще.

Если пользователь попадает в змейку, то она должна разделиться на две. В приаттаченом рисунке посмотрите, как это должно выглядеть.

Осталась одна проблема - стрельба из пушки. Она почему-то не работает.

Кто может, подскажите. как попроце сделать чтобы пушка стреляла по змейке и расчленяла ее. В моем варианте это не получатеся.

Допишите пожалуйста код, очень надо!

program max;uses crt,graph;type mas2=array[1..2] of integer; des=array[1..10] of integer; des_bool=array[1..10] of boolean;var kol,koord_golovx,koord_golovy:des;koord_puschki,cvet,vistrel,s_kol,j,i:integer; napr_left:des_bool;c:string;Procedure Grafika;varDriverVar, ModeVar:integer;beginDriverVar:=Detect;InitGraph (DriverVar,ModeVar,'\TP\GRAPH');end;procedure risovanie (const kol:integer; const napr_left:boolean;const koord_golovx:integer; const koord_golovy:integer);var i,x:integer; {risuem sorokanozku}beginSetFillstyle(1,14);if napr_left thenbeginfor i:=0 to (kol-1) do begin  x:=koord_golovx+i*5*2; {centri okruznostei udaleni na rasst. diametr (10)}  FillEllipse(x,koord_golovy,5,5); end;endelsebegin for i:=0 to (kol-1) do begin  x:=koord_golovx-i*5*2;  FillEllipse(x,koord_golovy,5,5); end;end;end;procedure stiranie(const koord_golovx:integer; const koord_golovy:integer; const kol:integer;const napr_left:boolean);beginSetFillstyle(1,0);if napr_left then  Bar(koord_golovx-5,koord_golovy-5,koord_golovx+10*kol,koord_golovy+5)  else Bar(koord_golovx+5,koord_golovy-5,koord_golovx-10*kol,koord_golovy+5);end;procedure ris_puschki(const koord_puschki:integer);var y:integer;beginy:=410;SetFillstyle(1,cvet);Bar(koord_puschki,y+20,koord_puschki+30,y+20+20);Bar(koord_puschki+10,y,koord_puschki+20,y+20);end;procedure buf;var c:char;beginwhile keypressed doc:=readkey;end;procedure uprawlen (var koord_puschki:integer;var vistrel:integer);var c:char;beginvistrel:=0;if keypressed thenbegin c:=readkey; case c of  '4':if koord_puschki>50 then koord_puschki:=koord_puschki-10;  '6':if (koord_puschki+30)<450 then koord_puschki:=koord_puschki+10;  '5':vistrel:=koord_puschki+10; {lewii krai dula}  end;end;buf;end;beginGrafika;Setcolor(red);s_kol:=1;Rectangle(44,44,456,456);{risuem ramku}kol[1]:=10;napr_left[1]:=true;koord_golovx[1]:=450;koord_golovy[1]:=50;koord_puschki:=300;repeatfor j:=1 to s_kol dorisovanie (kol[j],napr_left[j],koord_golovx[j],koord_golovy[j]);SetFillStyle(1,0);Bar(0,0,43,456);{pryachem lishnuyu sorokanozku}Bar(458,38,560,450);SetFillStyle(1,14);Delay(50000);Delay(5000);for j:=1 to s_kol dostiranie(koord_golovx[j],koord_golovy[j],kol[j],napr_left[j]);for j:=1 to s_kol doif napr_left[j]then begin  koord_golovx[j]:=koord_golovx[j]-10;  if koord_golovx[j]<(50-10*(kol[j])) then   begin koord_golovx[j]:=55;koord_golovy[j]:=koord_golovy[j]+10; napr_left[j]:=false; end endelsebeginkoord_golovx[j]:=koord_golovx[j]+10;if koord_golovx[j]>(450+10*(kol[j])) then  begin koord_golovx[j]:=445;koord_golovy[j]:=koord_golovy[j]+10; napr_left[j]:=true; end;end;cvet:=3;ris_puschki(koord_puschki);uprawlen(koord_puschki,vistrel);{popadanie}for j:=1 to s_kol dofor i:=0 to (kol[j]-1) do begin if napr_left[j] thenif (vistrel<>0) and (vistrel=koord_golovx[j]+i*10) then  begin  outtextxy(200,200,'11111');  kol[j]:=kol[j]-i;  kol[s_kol+1]:=i-1;  s_kol:=s_kol+1;  koord_golovx[s_kol]:=koord_golovx[j];  koord_golovy[s_kol]:=koord_golovy[j]+2;  napr_left[s_kol]:=not(napr_left[j]);  end elseif (vistrel>0) and (vistrel=koord_golovx[j]-i*10)then begin outtextxy(200,200,'2222');  kol[j]:=kol[j]-i;  kol[s_kol+1]:=i-1;  s_kol:=s_kol+1;  koord_golovx[s_kol]:=koord_golovx[j];  koord_golovy[s_kol]:=koord_golovy[j]+2;  napr_left[s_kol]:=not(napr_left[j]);  end end;{popadanie konez} SetFillStyle(1,0); Bar(50,410,450,450);{stiraem pusku} ris_puschki(koord_puschki);until keypressed;readln;end.

1.JPG

post-34963-1180258645_thumb.jpg

Edited by Бумер
Link to comment
Share on other sites

Решил упростить задачу. При попадании из пушки в змейку, она должна делиться пополам. Почему у меня пушка стреляет только когда змейка находится на самом верхнем уровне? Может не вызывается второй раз процедура upravlenie? Подскажите пожалуйста, мне очень надо!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...