Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Написание игр _ Танки встали!

Автор: -SMI- 15.02.2008 23:30

Есть вот такая игра. В ней создается танк(1) пользователя, который ездит и стреляет. Также сверху из-за экрана появляется еще один танк(2)(просто проезжает мимо). Проблема в том, что пока едит танк2 танк1 стоит.
Помогите!!!!!! unsure.gif Заранее благодарен!!!!!

Автор: andriano 15.02.2008 23:59

Советую для начала почитать тему, расположенную строкой ниже.

Автор: Гость 16.02.2008 18:37

Текст программы:
program gibo;
uses crt,graph;
Label 1,2, Mylabel;
var
Key:Char;
r,r2,i:integer;
Xk1,Xk2,Yk1,Yk2,Xp,Yp:integer;
Xv1,Xv2,Yv1,Yv2,Xv,Yv
:integer;
gd,gm:integer;
procedure Vrag;
Begin
randomize;
Xv1:=Random(600);
Xv2:=Xv1+40;
Yv1:=-200;;
Yv2:=-160;
r2:=20;
rectangle (Xv1,Yv1,Xv2,Yv2);
Circle(Xv1+r2,Yv1+r2,r2);
Line(Xv1+r2,Yv1+r2,Xv1+r2,Yv2+r2);
Repeat
Yv1:=Yv1+5;
Yv2:=Yv2+5;
Xv1:=Xv1;
Xv2:=Xv2;
Setcolor(Green);
rectangle (Xv1,Yv1,Xv2,Yv2);
Circle(Xv1+r2,Yv1+r2,r2);
Line(Xv1+r2,Yv1+r2,Xv1+r2,Yv2+r2);
Delay(13000);
Yv1:=Yv1;
Yv2:=Yv2;
R2:=20;
Xv1:=Xv1;
Xv2:=Xv2;
Setcolor(White);
rectangle (Xv1,Yv1,Xv2,Yv2);
Circle(Xv1+r2,Yv1+r2,r2);
Line(Xv1+r2,Yv1+r2,Xv1+r2,Yv2+r2);
Until Yv1>500;
setcolor(Green);
end;
Procedure Tank;
Begin
Xk1:=180;
Xk2:=220;
Yk1:=420;
Yk2:=460;
r:=20;
setcolor(Green);
rectangle(Xk1,Yk1,Xk2,Yk2);
Circle(Xk1+r,Yk1+r,r);
Line(Xk1+r,Yk1-r,Xk1+r,Yk2-r);
vrag;
end;
procedure Boom;
Begin
R:=20;
Xp:=Xk1+r;
Yp:=Yk2-r;
repeat
Xp:=Xp;
Yp:=Yp-45;
setcolor(4);
Circle(Xp,Yp,3);
Delay(2000);
Xp:=Xp;
Yp:=Yp;
setcolor(white);
Circle(Xp,Yp,3);
Until Yp<0;
sound(300);delay(150);
setcolor(green);
end;
procedure Up;
begin
Xk1:=Xk1;
Yk1:= Yk1-20;
Xk2:=Xk2;
Yk2:=Yk2-20;
r:=20;
ClearViewPort;
rectangle(Xk1,Yk1,Xk2,Yk2);
Circle(Xk1+r,Yk1+r,r);
Line(Xk1+r,Yk1-r,Xk1+r,Yk2-r);
repeat
key:=readkey;
if key='5' then Boom;
until key<>'5';
end;
procedure Left;
begin
Xk1:=Xk1-20;
Yk1:= Yk1;
Xk2:=Xk2-20;
Yk2:=Yk2;
r:=20;
ClearViewPort;
rectangle(Xk1,Yk1,Xk2,Yk2);
Circle(Xk1+r,Yk1+r,r);
Line(Xk1-r,Yk1+r,Xk1+r,Yk2-r);
end;
procedure Right;
begin
Xk1:=Xk1+20;
Yk1:= Yk1;
Xk2:=Xk2+20;
Yk2:=Yk2;
r:=20;
ClearViewPort;
rectangle(Xk1,Yk1,Xk2,Yk2);
Circle(Xk1+r,Yk1+r,r);
Line(Xk1+r+2*r,Yk1+r,Xk1+r,Yk2-r);
end;
procedure Down;
begin
Xk1:=Xk1;
Yk1:= Yk1+20;
Xk2:=Xk2;
Yk2:=Yk2+20;
r:=20;
ClearViewPort;
rectangle(Xk1,Yk1,Xk2,Yk2);
Circle(Xk1+r,Yk1+r,r);
Line(Xk1+r,Yk1+r,Xk1+r,Yk2+r);
end;
begin
gd:=detect;
initgraph(gd,gm,'c:/tp7');
SetBkColor(15);
tank;
repeat;
key:=readkey;
if key='8' then Begin
Up;
if key='5' then Boom;
end;
if key='4' then Left else
if key='6' then Right else
if key='2' then Down;
if key='9' then Vrag;
until key='0';
readln;
readln;
end.

Автор: SMI 16.02.2008 19:07

Цитата(andriano @ 15.02.2008 19:59) *

Советую для начала почитать тему, расположенную строкой ниже.

Ответа на мой вопрос я не нашел. no1.gif

Автор: andriano 16.02.2008 23:43

Цитата(SMI @ 16.02.2008 15:07) *

Ответа на мой вопрос я не нашел. no1.gif

Неудивительно.
Откуда же мы можем узнать про твой вопрос, если сам ты о нем ничего не пишешь?
(перечитай свой первый пост - в нем нет ни одного вопросительного знака)

Автор: SMI 17.02.2008 16:50

Цитата
Проблема в том, что пока танк2 едит танк1 стоит.

Вопрос: Что исправить в программе?

Автор: andriano 17.02.2008 19:22

Цитата(SMI @ 17.02.2008 12:50) *

Вопрос: Что исправить в программе?

Ее надо не исправлять, а переписывать, т.к. она имеет неправильную структуру.
Должен быть ЕДИНСТВЕННЫЙ основной игровой цикл, где проверяется состояние органов управления и вызывается ряд подпрограмм, изменяющих состояние и производящих отрисовку.
Использование readkey допускается в единственном месте основного игрового цикла и больше нигде ни в одной из вызываемых процедур.
То же саме касается и delay.
И, кстати, ты невнимательно читал то, что я тебе посоветовал, посмотри еще раз пост №4 в уже упоминавшейся теме.

PS. Больше я такой код разбирать не буду, приведи его в соответствие с правилами форума и надлежащим образом отформатируй.

Автор: spill 18.02.2008 19:10

Да уж...
Программу надо переписывать полностью...