Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 13.12.2016
Сообщений: 1

Анимация через заданное время

14.12.2016, 13:55. Показов 924. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Уже несколько дней борюсь с задачей, надеюсь, кто-нибудь сможет помочь.
Собственно суть вопроса: Каким образом можно сделать вывод фигуры на экран, через заданный промежуток времени?
Условие задачи:
Кликните здесь для просмотра всего текста

Изобразить на экране эллипс, пересекающий с постоянной скоростью экран справа налево параллельно его горизонтальной оси. Через заданное время от правого края в строке, выбранной с помощью датчика случайных чисел, начинает свое движение другой эллипс и т. д. Цвет эллипса выбирается с помощью датчика случайных чисел. Добиться того, чтобы одновременно на экране двигалось три, четыре эллипса.

Мой набросок:
Кликните здесь для просмотра всего текста

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
program z1_1;
uses
  graphABC,crt;
var
  x,y,c,t,s1,s2:integer;
procedure draw(x,y:integer; flag:boolean);
begin
  ellipse(x,y,x+100,y+50);
  if flag
  then floodfill(x+50,y+10, c)
  else floodfill(x+50,y+11,clblack);
end;
procedure drawanimation(x,y:integer);
begin
  draw(x,y,true);
  delay(10);
  draw(x,y,false);
end;
begin
  hidecursor;
  write('Введите время, через которое будет появляться новый эллипс: ');
  read(t);
  s1:=random(150)+50;
  writeln('Координаты первой случайной строки по Y: ',s1);
  s2:=random(150)+210;
  write('Координаты второй случайной строки по Y: ',s2);
  SetWindowSize(800,500);
  c:=RGB(random(255),random(255),random(255));
  rectangle(0,50,800,500);
  floodfill(100,100,clblack);
  x:=700;
  y:=100;
  setpencolor(clblack);
  while x<>1000 do
  begin
    drawanimation(x,y);
    drawanimation(x,y+s1);
    drawanimation(x,y+s2);
    x:=x-1;
    if (x=0) then
    begin
      repeat
      x:=x+1;
      drawanimation(x,y);
      drawanimation(x,y+s1);
      drawanimation(x,y+s2);
      until (x=700);
    end;
  end;
  draw(x,y,true);
end.


Добавлено через 23 часа 49 минут
Может быть, кому-нибудь пригодится.

Решение через массивы:
Кликните здесь для просмотра всего текста

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
program z1_1_array;
uses
  graphABC,crt,events;
const
  m=3;
  t=5*100;
var
  i,n,l,s1:integer;
  c:array[1..m] of integer;
  k:array[1..m] of integer;
  x:array[1..m] of integer;
  y:array[1..m] of integer;
  stop:boolean;
procedure draw(x,y,c:integer; flag:boolean);
begin
  ellipse(x,y,x+100,y+50);
  if flag then
  floodfill(x+50,y+10, c)
  else floodfill(x+50,y+10, clblack);
end;
begin
  n:=m;
  SetWindowSize(800,500);
  hidecursor;
  s1:=random(78)+76;
  writeln('Координаты 2-ого эллипса по Y: ',125+s1);
  write('Координаты 3-ого эллипса по Y: ',125+s1*2);
  rectangle(0,35,800,500);
  floodfill(100,100,clblack);
  setpencolor(clblack);
  for i:=1 to n do
  begin
    x[i]:=700;
    k[i]:=1;
    c[i]:=RGB(random(255),random(255),random(255));
  end;
  y[1]:=100;
  for i:=2 to n do
    y[i]:=y[i-1]+s1;
  stop:=false;
  n:=1;
  repeat
  for i:=1 to n do begin
    draw(x[i],y[i],c[i],true);
    delay(10);
    draw(x[i],y[i],c[i],false);
    case k[i] of
      1:x[i]:=x[i]-1;
      2:x[i]:=x[i]+1;
    end;
    if x[i]=700 then k[i]:=1;
    if x[i]=0 then k[i]:=2;
    l:=l+1;
    if (l=t) and (n<3)then
    begin
      l:=0;
      n:=n+1;
    end;
    end;
  until stop;
end.


Case of и процедура на каждый новый эллипс (Не самое разумное решение!):
Кликните здесь для просмотра всего текста

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
program z1_1_caseof;
uses
  graphABC,crt,events;
const
  t=5*100;
var
  x1,y1,x2,y2,x3,y3:integer;
  k1,k2,k3:integer;
  c1,c2,c3:integer;
  s1,s2:integer;
  l:integer;
  stop:boolean;
procedure draw(x,y,c:integer; flag:boolean);
begin
  ellipse(x,y,x+100,y+50);
  if flag then
  floodfill(x+50,y+10, c)
  else floodfill(x+50,y+10, clblack);
end;
procedure drawanimation1(var x1,y1:integer);
begin
  draw(x1,y1,c1,true);
  delay(10);
  draw(x1,y1,c1,false);
  case k1 of
    1: x1:=x1-1;
    2: x1:=x1+1;
  end;
  if x1=700 then k1:=1;
  if x1=0 then k1:=2;
end;
procedure drawanimation2(var x2,y2:integer);
begin
  draw(x2,y2,c2,true);
  delay(10);
  draw(x2,y2,c2,false);
  case k2 of
    1: x2:=x2-1;
    2: x2:=x2+1;
  end;
  if x2=700 then k2:=1;
  if x2=0 then k2:=2;
end;
procedure drawanimation3(var x3,y3:integer);
begin
  draw(x3,y3,c3,true);
  delay(10);
  draw(x3,y3,c3,false);
  case k3 of
    1: x3:=x3-1;
    2: x3:=x3+1;
  end;
  if x3=700 then k3:=1;
  if x3=0 then k3:=2;
end;
begin
  SetWindowSize(800,500);
  hidecursor;
  s1:=random(150)+50;
  writeln('Координаты 2-ого эллипса по Y: ',125+s1);
  s2:=random(150)+210;
  write('Координаты 3-ого эллипса по Y: ',125+s2);
  c1:=RGB(random(255),random(255),random(255));
  c2:=RGB(random(255),random(255),random(255));
  c3:=RGB(random(255),random(255),random(255));
  rectangle(0,35,800,500);
  floodfill(100,100,clblack);
  x1:=700;x2:=x1;x3:=x1;
  y1:=100;y2:=y1+s1;y3:=y1+s2;
  setpencolor(clblack);
  stop:=false;
  l:=0;
  repeat
  case l of
    0..t:begin drawanimation1(x1,y1);l:=l+1;end;
    t+1..2*t:begin drawanimation1(x1,y1);drawanimation2(x2,y2);l:=l+2;end;
    2*t+1..3*t:begin drawanimation1(x1,y1);drawanimation2(x2,y2);drawanimation3(x3,y3);l:=2*t+2 end;
  end;
  until stop;
end.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.12.2016, 13:55
Ответы с готовыми решениями:

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

FadeIn/fadeOut через заданное время
Здравствуйте, у меня есть небольшой блок который обновляется раз в минуту: function show(){ $.ajax({ ...

Выполнение действия через заданное время.
У меня появилось 2 вопроса, буду благодарен за помощ... Вопрос 1. Засекаем реальное время ((((DateTime.Now.Hour * 60) +...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.12.2016, 13:55
Помогаю со студенческими работами здесь

Програмно выключить ПК через заданное время
Как из вба выключить пк через заданое время

Выполнение метода через заданное время
Добрый день! Интересует вопрос: как сделать периодическое выполнение некоторого метода ? Т.е. при загрузке формы, этот метод выполнился...

Появление объекта через заданное время canvas
Здравствуйте, подскажите, как сделать, чтобы красный квадрат появлялся через 5 секунд. https://jsfiddle.net/3xbc2L9q/ &lt;canvas...

Открыть новую вкладку через заданное время
Здравствуйте мастера. Подскажите пожалуйста, как сделать?: скрипт JS так понимаю, который например, через 3 секунды откроет новую...

Запуск установленной программы через заданное время
помогите написать программу на С++ , которая бы вызывала с терминала установленную программу sensors через определенное время. не знаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru