Бумер Posted May 27, 2007 Report Share Posted May 27, 2007 (edited) Привет, народ. Оч. нужно дописать прогу. Суть проги: змейка движется горизонтально от правого края к левому, постепенно опускаясь вниз. Если она дойдет до пушки, то вы проиграли. Я запрограммировал движение змеек, пушки, и кое что еще. Если пользователь попадает в змейку, то она должна разделиться на две. В приаттаченом рисунке посмотрите, как это должно выглядеть. Осталась одна проблема - стрельба из пушки. Она почему-то не работает. Кто может, подскажите. как попроце сделать чтобы пушка стреляла по змейке и расчленяла ее. В моем варианте это не получатеся. Допишите пожалуйста код, очень надо! 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. Edited May 27, 2007 by Бумер Link to comment Share on other sites More sharing options...
Бумер Posted May 28, 2007 Author Report Share Posted May 28, 2007 Решил упростить задачу. При попадании из пушки в змейку, она должна делиться пополам. Почему у меня пушка стреляет только когда змейка находится на самом верхнем уровне? Может не вызывается второй раз процедура upravlenie? Подскажите пожалуйста, мне очень надо! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now