Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2012, 14:11   #1
Alina111
Пользователь
 
Регистрация: 20.12.2011
Сообщений: 40
Вопрос Движение объектов, паскаль

Как реализовать одновременное движение двух объектов, один из которых управляется клавиатурой,а второй двигается сам.Все работает но поочередно.
Код:
Procedure mishen(x,y,i:integer;k:word); 
begin 
i:=15; 
While i<=75 do 
begin 
i:=i+15; 
Setcolor(k); 
circle(x,150,i); 
end; 
end; 

Procedure dvigenie(x,y:integer); 
 Begin 
 begin 
 mishen(300,150,i,15); 
 d:=10; 
 m1:=100; 
 x:=300; 
 While x<450 do 
 begin 
 mishen(x,y,i,7); 
 x:=x+d; 
 mishen(x,y,i,15); 
 Delay(m1); 
 end; 
 end; 
 begin 
 mishen(450,150,i,15); 
 d:=10; 
 m1:=100; 
 x:=450; 
 While x>200 do 
 begin 
 mishen(x,y,i,7); 
 x:=x-d; 
 mishen(x,y,i,15); 
 Delay(m1); 
 mishen(x,y,i,7); 
 end; 
 end; 
 begin 
 mishen(200,150,i,7); 
 d:=10; 
 m1:=100; 
 x:=150; 
 While x<300 do 
 begin 
 mishen(x,y,i,7); 
 x:=x+d; 
 mishen(x,y,i,15); 
 Delay(m1); 
 mishen(x,y,i,7); 
 end; 
 end; 
 end; 

Procedure drotik(s,f:integer); 
begin 
Setcolor(5); 
Line(s,f,s,f+50); 
Setcolor(5); 
Line(s,f,s+10,f+30); 
Setcolor(5); 
Line(s,f,s-10,f+30); 
Setcolor(5); 
Line(s+10,f+30,s-10,f+30); 
end; 

procedure game; 
var s1,f1:integer; 
begin 
podkl; 
mishen(x,y,i,k); 

s1:=300; 
f1:=350; 

drotik(s1,f1); 
l:=10;p:=300; 

repeat 
ch:=readkey; 
dvigenie(x,y); 
dvigenie(x,y); 
if ch=#0 then ch:=readkey; 

setfillstyle(1,7); 
setcolor(7); 

Line(s1,f1,s1,f1+50); 

Line(s1,f1,s1+10,f1+30); 

Line(s1,f1,s1-10,f1+30); 

Line(s1+10,f1+30,s1-10,f1+30); 

case ch of 
#75: if s1-l<100 then else begin s1:=s1-l; end; 
#77: if s1+l>530 then else begin s1:=s1+l; end; 
end; 

drotik(s1,f1); 
until ch=#27; 
readln; 
closegraph; 
end;
Первая процедура - это прорисовка мишени,затем ее движение,потом идет процедура прорисовки дротика,а в процедуре game нужно сделать так, чтобы можно было управлять дротиком во время движения мишени.
Alina111 вне форума Ответить с цитированием
Старый 06.06.2012, 14:52   #2
@нтошка
Помог? Дави весы!
Пользователь
 
Регистрация: 15.05.2012
Сообщений: 25
По умолчанию

Во-первых, оформляйте код читабельнее:

Код:
Procedure mishen(x,y,i:integer;k:word);
begin
  i:=15;
  While i<=75 do
  begin
    i:=i+15;
    Setcolor(k);
    circle(x,150,i);
  end;
end;

Procedure dvigenie(x,y:integer);
Begin
  mishen(300,150,i,15);
  d:=10;
  m1:=100;
  x:=300;
  While x<450 do
  begin
    mishen(x,y,i,7);
    x:=x+d;
    mishen(x,y,i,15);
    Delay(m1);
  end;

  mishen(450,150,i,15);
  d:=10;
  m1:=100;
  x:=450;
  While x>200 do
  begin
    mishen(x,y,i,7);
    x:=x-d;
    mishen(x,y,i,15);
    Delay(m1);
    mishen(x,y,i,7);
  end;

  mishen(200,150,i,7);
  d:=10;
  m1:=100;
  x:=150;
  While x<300 do
  begin
    mishen(x,y,i,7);
    x:=x+d;
    mishen(x,y,i,15);
    Delay(m1);
    mishen(x,y,i,7);
  end;

end;

Procedure drotik(s,f:integer);
begin
  Setcolor(5);
  Line(s,f,s,f+50);
  Setcolor(5);
  Line(s,f,s+10,f+30);
  Setcolor(5);
  Line(s,f,s-10,f+30);
  Setcolor(5);
  Line(s+10,f+30,s-10,f+30);
end;

procedure game;
var s1,f1:integer;
begin
  podkl;
  mishen(x,y,i,k);

  s1:=300;
  f1:=350;

  drotik(s1,f1);
  l:=10;p:=300;

  repeat
    ch:=readkey;
    dvigenie(x,y);
    dvigenie(x,y);
    if ch=#0 then ch:=readkey;

    setfillstyle(1,7);
    setcolor(7);

    Line(s1,f1,s1,f1+50);

    Line(s1,f1,s1+10,f1+30);

    Line(s1,f1,s1-10,f1+30);

    Line(s1+10,f1+30,s1-10,f1+30);

    case ch of
    #75: if s1-l<100 then else  s1:=s1-l;
    #77: if s1+l>530 then else  s1:=s1+l;
    end;

    drotik(s1,f1);
  until ch=#27;
  readln;
  closegraph;
end;
Во-вторых, зачем Вам столько лишних begin и end ???

Ну а в-третьих, на какой версии Паскаля Вы это писали?? И с использованием каких библиотек. Ибо без компиляции не совсем понятна суть ошибки.
@нтошка вне форума Ответить с цитированием
Старый 06.06.2012, 14:58   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Чисто теоретически, т.к. ненавижу разбираться в чужом коде:
Создать цикл по времени, а не по нажатию кнопки
В нем проверять, не нажимались ли кнопки, и если нажимались, то обработать нажатия
В цикле делать отрисовку мишени и дротика

Тогда они будут двигаться одновременно
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 06.06.2012, 14:59   #4
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Сделать процедуру рисования для каждого объекта, в которую передавать координаты для отрисовки + цвет.

Далее бесконечный цикл, в котором независимый объект перемещается при помощи random`а, а зависимый - при помощи отловленного нажатия клавиш.

Перед циклом объекты (оба) рисуются цветом фона по старым координатам, координаты меняются, объекты отрисовываются снова.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
движение графических объектов elka Общие вопросы C/C++ 9 25.04.2012 17:24
Движение объектов в Delphi citruswa Общие вопросы Delphi 3 10.03.2012 10:16
свободное движение объектов С++ ruber54 Помощь студентам 4 12.12.2011 21:33
Движение графических объектов Krivo1993 Помощь студентам 4 31.01.2011 13:58
Движение 2-x объектов (Delphi) VadEr Помощь студентам 2 06.06.2009 17:19