Перейти к содержанию
СофтФорум - всё о компьютерах и не только

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


Рекомендуемые сообщения

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

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

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

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

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

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

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

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

Изменено пользователем Бумер
Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...