Графика: циферблат механических часов с секундной, минутной и часовой стрелками - Pascal ABC
Формулировка задачи:
Составьте программу вывода на экран изображения циферблата механических часов с секундной, минутной и часовой стрелками. Запуск часов осуществляйте клавишей Enter, при этом перемещение секундной стрелки сопровождается «характерным» для часов звуком.В 3, 6, 9 и 12 часов на экране появляется кукушка, подает соответствующее число сигналов и исчезает.
Программу нужно написать с помощью процедур.
Решение задачи: «Графика: циферблат механических часов с секундной, минутной и часовой стрелками»
textual
Листинг программы
uses crt, GraphABC; var x0,y0,x,y,R,min,sec,chas,kx,ky: integer; procedure Ku(z: integer); begin setfontcolor(clbrown); setfontsize(20); setbrushcolor(clwhite); if z=12 then textout(300,20,'ГЉГ“-ГЉГ“ 12 Г°Г*Г§'); if z=3 then textout(300,20,'ГЉГ“-ГЉГ“ 3 Г°Г*Г§Г*'); if z=6 then textout(300,20,'ГЉГ“-ГЉГ“ 6 Г°Г*Г§'); if z=9 then textout(300,20,'ГЉГ“-ГЉГ“ 9 Г°Г*Г§'); end; procedure Ku2; begin SetPenWidth(1); setbrushcolor(clsilver); line(265,120,285,130); line(265,140,285,130); circle(240,140,20); circle(260,130,15); setbrushcolor(clblack); circle(265,130,5); floodfill(275,130,clblack); line(235,150,235,170); line(245,150,245,170); end; begin lockdrawing; SetWindowSize(500,700); HideCursor; x0:=250; y0:=450; min:=0; sec:=0; repeat ClearWindow; SetPenWidth(5); setbrushcolor(clbrown); rectangle(20,200,480,700); setbrushcolor(clyellow); rectangle(40,200,60,700); rectangle(460,200,440,700); rectangle(20,220,480,240); rectangle(20,440,480,460); rectangle(20,660,480,680); rectangle(240,200,260,700); setbrushcolor(clwhite); circle(250,450,170); line(20,200,250,20); line(480,200,250,20); circle(250,130,50); floodfill(250,50,clbrown); setfontsize(26); setfontcolor(clblack); setfontstyle(fsbold); textout(230,290,'12'); textout(243,575,'6'); textout(385,435,'3'); textout(100,435,'9'); sec:=sec+1; min:= sec div 60;chas:=min div 60; x:=x0+Round(120*sin(Pi*sec/30)); y:=y0-Round(120*cos(Pi*sec/30)); SetPenWidth(3); Line(x0, y0, x, y); x:=x0+Round(100*sin(Pi*min/30)); y:=y0-Round(100*cos(Pi*min/30)); SetPenWidth(7); Line(x0, y0, x, y); kx:=x;ky:=y; x:=x0+Round(60*sin(Pi*chas/6)); y:=y0-Round(60*cos(Pi*chas/6)); SetPenWidth(10); Line(x0, y0, x, y); if (y<=450) and (kx=250) and (ky<=450) and (x=250) then begin Ku2; Ku(12); end; if (x<=250) and (kx=250) and (ky<=450) and (y=450) then begin Ku2; Ku(9); end; if (y>=450) and (kx=250) and (ky<=450) and (x=250) then begin Ku2; Ku(6); end; if (x>=250) and (kx=250) and (ky<=450) and (y=450) then begin Ku2; Ku(3); end; Redraw; until keyPressed; end.
Объяснение кода листинга программы
- Назначение кода - реализация циферблата механических часов с секундной, минутной и часовой стрелками.
- Используемые библиотеки - GraphABC, CRT.
- Переменные:
- x0, y0 - координаты центра циферблата;
- min, sec, chas - текущее время (минуты, секунды, часы);
- R - радиус циферблата;
- kx, ky - координаты указателя на текущее время;
- x, y - координаты стрелок;
- Ku - процедура отрисовки циферблата;
- Ku2 - процедура отрисовки стрелок.
- Действия при запуске программы:
- Задание начального времени;
- Отображение циферблата;
- Обновление положения стрелок каждую секунду;
- Реагирование на нажатия клавиш.
- Описание процедуры Ku:
- Вывод на экран названий и значений часов, минут и секунд в формате ГЉГ“-ГЉГ“ ЧЧ Г°Г*Г§.
- Описание процедуры Ku2:
- Отображение стрелок на циферблате.
- Описание основной процедуры:
- Проверка положения указателя на текущее время и вызов соответствующих процедур отрисовки циферблата и стрелок.
- Код использует функцию sin и cos для расчета положения стрелок.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д