模拟时钟转动程序

#include
#include
#include
#include
#include
#include
#define PI 3.1415926
#define ESC 0x11b
#define step 10
/*函数声明*/
int digithour(double);
int digitmin(double);
int digitsec(double);
void digitclock(int,int,int);
void clockhandle();
void abc();
void def();

double h,m,s,day,mon;
double x,x1,x2,y,y1,y2;
struct time t[1];


/*主函数*/
main()
{
int driver,mode=0,i,j;

driver=DETECT; /*自动检测显示设备*/
initgraph(&driver,&mode,""); /*初始化图形系统 */
setlinestyle(0,0,3);
setbkcolor(0);
/*画主体框架的边线*/
setcolor(12);
line(82,430,558,430);
line(70,62,70,418);
line(82,50,558,50);
line(570,62,570,418);
line(70,62,570,62);
line(76,56,295,56);
line(342,56,564,56);

/*画主体框架的边角弧线*/
setlinestyle(0,0,3);
arc(82,62,90,180,12);
setlinestyle(0,0,3);
arc(558,62,0,90,12);
setlinestyle(0,0,3);
arc(82,418,180,279,12);
setlinestyle(0,0,3);
arc(558,418,270,360,12);

setlinestyle(0,0,7);
setcolor(9);
outtextxy(301,53,"CLOCK");
setcolor(15);
outtextxy(299,53,"CLOCK"); /*显示标题*/
setcolor(9);
rectangle(342,72,560,380); /*绘制矩形时钟框架 */
setwritemode(0); /*规定划线的方式(将所画位置的原来信息覆盖)*/
setcolor(13);
outtextxy(405,75,"BeiJing Shijian");

/*绘制电子时钟的边框*/
setlinestyle(0,0,1);
setcolor(7);
line(392,310,510,310);
line(392,330,510,330);
arc(392,320,90,270,10);
arc(510,320,270,90,10);
/*绘制数字时钟的分隔符*/
setcolor(5);
for(i=431;i<=470;i+=39)
for(j=317;j<=324;j+=7){
setlinestyle(0,0,3);
circle(i,j,1);
}
/*绘制表示小时的圆点*/
for(i=0,m=0,h=0;i<=11;i++,h++){
x=100*sin((h*60+m)/360*PI)+451;
y=200-100*cos((h*60+m)/360*PI);
setlinestyle(0,0,3);
setcolor(5);
circle(x,y,1);
}
/*绘制表示分针或秒针的圆点*/
setcolor(3);
for(i=0,m=0;i<=59;m++,i++){
x=100*sin(m/30*PI)+451;
y=200-100*cos(m/30*PI);
setlinestyle(0,0,1);
circle(x,y,1);
}

setlinestyle(0,0,5);
setcolor(5);
outtextxy(110,90,"Name :Li Jianli");
outtextxy(110,105,"Xuehao:12020326");
setcolor(10);
outtextxy(108,90,"Name");
outtextxy(108,105,"Xuehao");
setcolor(14);
outtextxy(180,410,"Press Esc to change windows!");

def();
clockhandle(); /*开始调用时针处理程序*/
abc();
closegraph(); /*关闭图形函数*/
return 0;
}

/*时针处理函数*/
void clockhandle()

{
int k=0,n=0;
setcolor(15);
gettime(t); /*获取系统时间*/
h=t[0].ti_hour;
m=t[0].ti_min;
x=50*sin((h*60+m)/360*PI)+451; /*时针的x坐标值*/
y=200-50*cos((h*60+m)/360*PI);

/*时针的y坐标值*/
line(451,200,x,y);

x1=80*sin(m/30*PI)+451; /*分针的x坐标值*/
y1=200-80*cos(m/30*PI); /*分针的y坐标值*/
line(451,200,x1,y1);


/*在数字时钟中显示时间*/
digitclock(408,318,digithour(h));
digitclock(446,318,digitmin(m));

setwritemode(1); /*设置图形方式下划线输出模式*/
for(;k!=ESC;){
setcolor(12);
/*声音处理*/
sound(500); /*以频率为500Hz打开PC扬声器*/
delay(700); /*发一个500Hz的音调,维持700毫秒*/
sound(200);
delay(300);
nosound(); /*关闭PC扬声器*/

s=t[0].ti_sec;
m=t[0].ti_min;
h=t[0].ti_hour;

x2=98*sin(s/30*PI)+451; /*秒针的x坐标值*/
y2=200-98*cos(s/30*PI); /*秒针的y坐标值*/
line(451,200,x2,y2);

/*运动的问候语*/
setfillstyle(0,2);
bar(100,115,320,150);
setcolor(4);
settextstyle(1,0,99);
outtextxy(101+n*5,140,"Welcome!");
n=n+1;
if(n>28) n=0;


/*利用此循环,延时一秒*/
while(t[0].ti_sec==s&&t[0].ti_min==m&&t[0].ti_hour==h)
{ gettime(t);
if(bioskey(1)!=0){
k=bioskey(0);
}
}
/*数字时钟的秒针*/
setcolor(15);
digitclock(485,318,digitsec(s)+1);

/*用原来的颜色在原来位置再绘制秒针,清除当前秒针*/
setcolor(12);
x2=98*sin(s/30*PI)+451;
y2=200-98*cos(s/30*PI);
line(451,200,x2,y2);

/*分针处理*/
if(t[0].ti_min!=m){
/*消除当前分针*/
setcolor(15);
x1=80*sin(m/30*PI)+451;
y1=200-80*cos(m/30*PI);
line(451,200,x1,y1);
/*绘制新的分针*/
m=t[0].ti_min;
digitclock(446,318,digitmin(m)); /*在数字时钟中显示新的钟值*/
x1=80*sin(m/30*PI)+451;
y1=200-80*cos(m/30*PI);
line(451,200,x1,y1);
}
/*小时处理*/
if((t[0].ti_hour*60+t[0].ti_min)!=(h*60+m)){
/*消除当前时针*/
setcolor(15);
x=50*sin((h*60+m)/360*PI)+451;
y=200-50*cos((h*60+m)/360*PI);
line(451,200,x,y);
/*绘制新的时针*/
h=t[0].ti_hour;
digitclock(408,318,digithour(h));
x=50*sin((h*60+m)/360*PI)+451;
y=200-50*cos((h*60+m)/360*PI);
line(451,200,x,y);
}
}
}


/*在指定位置显示数字时钟*/
void digitclock(int x,int y,int clock)
{char bufferl[10];
setfillstyle(0,2);
bar(x,y,x+15,328); /*画一个二维码*/
if(clock==60) clock=0;
sprintf(bufferl,"%d",clock);
outtextxy(x,y,bufferl);
}

/*将double型的小时数转换成int型*/
int digithour(double h)
{ int i;
for(i=0;i<=23;i++)
{if(h==i) return i;}
}
/*将double型的分针数转换成int型*/
int digitmin(double m)
{int i;
for(i=0;i<=59;i+

+)
{if(m==i) return i;}
}
/*将double型的秒钟数转换成int型*/
int digitsec(double s)
{int i;
for(i=0;i<=59;i++)
{if(s==i) return i;}
}

/*滚动的字幕*/
void abc()
{
int n,size,q=0;
static int startx=5;
static int starty=10;
setbkcolor(1);
while(q<10)
{
q=q+1;
for(n=1;n<=35;n++)
{
cleardevice();
setcolor(2);
setlinestyle(0,0,1);
setfillstyle(1,10);
rectangle(startx+n*step,starty+n*step,startx+n*step+160,starty+n*step+80); /*绘制矩形*/
floodfill(startx+n*step+10,starty+n*step+20,2);
settextstyle(1,0,20);
outtextxy(startx+40+n*step,starty+n*step+40,"Thank you!");
delay(6e10);
}
}
}

/*绘画彩带函数*/
void def()
{
double a;
int d,e,color=1;
for (a=75;a<=300;a+=1)
{
setcolor(color);
/*计算划线位置*/
d=220+30*cos(a/47.75 );
e=200+30*sin(a/47.75-PI/2);

line(a,d,a+30,d);
line(a,e,a+30,e);
setcolor(color+5);
line(a,d+90,a+30,d+90);
line(a,e+90,a+30,e+90);
delay(10000);
color++;
if(color>15)
color=1;
}
getch();
}

相关文档
最新文档