Бумер Опубликовано 27 мая, 2007 Жалоба Поделиться Опубликовано 27 мая, 2007 (изменено) Привет, народ. Оч. нужно дописать прогу. Суть проги: змейка движется горизонтально от правого края к левому, постепенно опускаясь вниз. Если она дойдет до пушки, то вы проиграли. Я запрограммировал движение змеек, пушки, и кое что еще. Если пользователь попадает в змейку, то она должна разделиться на две. В приаттаченом рисунке посмотрите, как это должно выглядеть. Осталась одна проблема - стрельба из пушки. Она почему-то не работает. Кто может, подскажите. как попроце сделать чтобы пушка стреляла по змейке и расчленяла ее. В моем варианте это не получатеся. Допишите пожалуйста код, очень надо! 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. Изменено 27 мая, 2007 пользователем Бумер Ссылка на комментарий Поделиться на другие сайты Поделиться
Бумер Опубликовано 28 мая, 2007 Автор Жалоба Поделиться Опубликовано 28 мая, 2007 Решил упростить задачу. При попадании из пушки в змейку, она должна делиться пополам. Почему у меня пушка стреляет только когда змейка находится на самом верхнем уровне? Может не вызывается второй раз процедура upravlenie? Подскажите пожалуйста, мне очень надо! Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти