Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 20.03.2011, 17:50   #1 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
Exclamation Заставить двигаться по кругу

чтоб решить проблему с демоном, решаю такую мини программку.
Точка движется по кругу. зелёная точка.
что нужно сделать чтобы вместо точки двигался какой-нить символ? тот же "%". пока удалось засунуть его только в угол программы ((

Код:
uses crt,graph;
var x0,y0,x1,y1,r,gd,gm:integer;
    i:longint;
begin
gd:=detect;
initgraph(gd,gm,'');
x0:=getmaxX div 2;
y0:=getmaxY div 2;
r:=y0-100;
i:=1;
repeat
x1:=x0+round(r*sin(i*pi/180));
y1:=y0-round(r*cos(i*pi/180));
setcolor(green);
outtextXY(x, y, '%)');
circle(x1,y1,1);
delay(1000);
setcolor(0);

circle(x1,y1,1);
i:=i+1;
until keypressed;
end.
Хелен вне форума   Ответить с цитированием

Старый 20.03.2011, 17:50
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Интересующие вас ответы могут быть тут

Куда двигаться дальше?
Как заставить видеоадаптер работать на разрешении 1024х576 ?
Как заставить gif двигаться
как заставить работать 2 вентилятора от одного контроллера
Как заставить светиться радиолампу?

Старый 21.03.2011, 08:58   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Вот малость исправленный вариант:
Код:
uses crt,graph;
var x0,y0,x1,y1,i,r,gd,gm:integer;
begin
gd:=detect;
initgraph(gd,gm,'');
x0:=getmaxX div 2;
y0:=getmaxY div 2;
r:=y0-100;
i:=0;
repeat
x1:=x0+round(r*sin(i*pi/180));
y1:=y0-round(r*cos(i*pi/180));
setcolor(green);
outtextXY(x1, y1, '%)');
circle(x1,y1,1);
delay(10);
setcolor(0);
circle(x1,y1,1);
if i<361 then inc(i) else i:=0;
until keypressed;
end.
Отличия выделены цветом, но, в принципе, и ваш вариант вполне работоспособен, стоило только указать правильные имена переменных в команде outtextxy()
У вас была выставлена слишком большая задержка - секунда, поэтому вы и не видели результата
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 21.03.2011, 16:01   #3 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
По умолчанию

не совсем то, что я имела ввиду)
у вас получилась линия в виде круга, а я хотела чтобы двигалась настолько быстро, чтобы только мигал значок "%" по траектории круга, а не вычерчивал его, т.е. чтобы не был видел в каждой точке круга, а например в восьми.
Хелен вне форума   Ответить с цитированием
Старый 21.03.2011, 16:30   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Хелен Посмотреть сообщение
не совсем то, что я имела ввиду)
у вас получилась линия в виде круга, а я хотела чтобы двигалась настолько быстро, чтобы только мигал значок "%" по траектории круга, а не вычерчивал его, т.е. чтобы не был видел в каждой точке круга, а например в восьми.
Вот:
Код:
uses crt,graph;
var
 x0,y0,x1,y1,i,r,gd,gm:integer;
begin
 gd:=detect;
 initgraph(gd,gm,'');
 x0:=getmaxX div 2;
 y0:=getmaxY div 2;
 r:=y0-100;
 i:=0;
 repeat
  x1:=x0+round(r*sin(i*pi/180));
  y1:=y0-round(r*cos(i*pi/180));
  SetBkColor(Black);
  If (i mod 45)=0 then
   begin
    setcolor(green);
    outtextXY(x1, y1, '%)');
    delay(100);
    setcolor(black);
    outtextXY(x1, y1, '%)');
   end;
 if i<361 then inc(i) else i:=0;
 until keypressed;
end.
Так?
Vladimir_S вне форума   Ответить с цитированием
Старый 21.03.2011, 18:28   #5 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
По умолчанию

То что надо! спасибо большое, продолжаю трудится над монстрами =)
Хелен вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 22.03.2011, 06:08   #6 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Более конкретно задачи ставьте, а то сначала малопонятно было, что именно вам надо сделать.

Я бы сделал сначала стирание на старом месте, а потом рисование на новом месте, чтобы по выходу из цикла символ на экране оставался.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 05:51.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.