Имитация часов. Движение по часовой стрелке - Pascal ABC
Формулировка задачи:
Здравствуйте.
Помогите пожалуйста.
Дело вот в чем, нужно сделать имитацию часов, пока первая стрелка делает 1 круг, вторая делает два. Фон - рисунок.
Не могу додуматься как стрелки направить в правильную сторону, и как ихнее движение сделать по отдельности.
И если не сложно, подскажите каким способом лучше очищать (что бы движение было видно), просто мигает, а это раздражительно.
Строго не судите, начинающий.
Забыл шаг уменьшить, что бы стрелки не так быстро летали....0.001 в самый раз.
Решение задачи: «Имитация часов. Движение по часовой стрелке»
textual
Листинг программы
Program Clock;
USES Crt,graphABC;
var xc,yc,x1,y1,x2,y2,r1,r2:integer;
k:integer;
a1,a2:real;
pic:string;
begin
hidecursor;
SetWindowSize(400,400);
SetFontStyle(fsBoldItalicUnderline);
SetFontName('Arial');
SetFontColor(clOlive);
pic:=('cvet.bmp');
k:=loadPicture(pic);
xc:=windowwidth div 2;
yc:=windowheight div 2;
SetPenWidth(5);
a1:=0;a2:=0;
r1:=100; r2:=80;
repeat
DrawPicture(k,0,0,400,400);
TextOut(100,380,'"Эмуляция часов"');
SetFontSize(10);
SetFontColor(clBlack);
TextOut(xc,yc-r1-10,'"12"');
TextOut(xc,yc+r1+10,'"6"');
TextOut(xc+r1+10,yc,'"3"');
TextOut(xc-r1-10,yc,'"9"');
SetPenColor(clBlack);
x1:=xc+round(r1*sin(Pi*a1/180));
y1:=yc-round(r1*cos(Pi*a1/180));
Line(xc,yc,x1,y1);
SetPenColor(clRed);
x2:=xc+round(r2*sin(Pi*a2/180));
y2:=yc-round(r2*cos(Pi*a2/180));
Line(xc,yc,x2,y2);
sleep(1000);
clearwindow;
a1:=a1+12;
a2:=a2+6;
Until keypressed
end.
Объяснение кода листинга программы
- Объявление переменных: xc, yc, x1, y1, x2, y2, r1, r2, k, a1, a2, pic (ссылки на графические элементы и переменные для их хранения).
- Установка параметров экрана и шрифта: SetWindowSize(400, 400); SetFontStyle(fsBoldItalicUnderline); SetFontName('Arial'); SetFontColor(clOlive);
- Загрузка изображения: pic := ('cvet.bmp'); k := loadPicture(pic);
- Установка начальных значений переменных: xc := windowwidth div 2; yc := windowheight div 2; r1 := 100; r2 := 80; a1 := 0; a2 := 0;
- Цикл выполнения программы:
repeat
Отображение изображения и текста:
DrawPicture(k, 0, 0, 400, 400);
TextOut(100, 380, '
Эмуляция часов'); SetFontSize(10); SetFontColor(clBlack); TextOut(xc, yc - r1 - 10, '12'); TextOut(xc, yc + r1 + 10, '6'); TextOut(xc + r1 + 10, yc, '3'); TextOut(xc - r1 - 10, yc, '9'); SetPenColor(clBlack); Вычисление координат для линий: x1 := xc + round(r1 sin(Pi a1 / 180)); y1 := yc - round(r1 cos(Pi a1 / 180)); x2 := xc + round(r2 sin(Pi a2 / 180)); y2 := yc - round(r2 cos(Pi a2 / 180)); Отображение линий: SetPenColor(clRed); Line(xc, yc, x1, y1); Line(xc, yc, x2, y2); Задержка в 1 секунду: sleep(1000); Очистка окна: clearwindow; Увеличение значений переменных: a1 := a1 + 12; a2 := a2 + 6; until keypressed - Завершение программы.