Графика: циферблат механических часов с секундной, минутной и часовой стрелками - 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.

Объяснение кода листинга программы

  1. Назначение кода - реализация циферблата механических часов с секундной, минутной и часовой стрелками.
  2. Используемые библиотеки - GraphABC, CRT.
  3. Переменные:
    • x0, y0 - координаты центра циферблата;
    • min, sec, chas - текущее время (минуты, секунды, часы);
    • R - радиус циферблата;
    • kx, ky - координаты указателя на текущее время;
    • x, y - координаты стрелок;
    • Ku - процедура отрисовки циферблата;
    • Ku2 - процедура отрисовки стрелок.
  4. Действия при запуске программы:
    • Задание начального времени;
    • Отображение циферблата;
    • Обновление положения стрелок каждую секунду;
    • Реагирование на нажатия клавиш.
  5. Описание процедуры Ku:
    • Вывод на экран названий и значений часов, минут и секунд в формате ГЉГ“-ГЉГ“ ЧЧ Г°Г*Г§.
  6. Описание процедуры Ku2:
    • Отображение стрелок на циферблате.
  7. Описание основной процедуры:
    • Проверка положения указателя на текущее время и вызов соответствующих процедур отрисовки циферблата и стрелок.
  8. Код использует функцию sin и cos для расчета положения стрелок.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы