TC下運行……
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include<bios.h>
#include<dos.h>
#define BK_COLOR 0 /* 時鐘外背景色,0-15 所有帶 COLOR 取值範圍爲0 到15 */
#define RING_COLOR 3 /* 環填充色 */
#define CLOCK_BK_COLOR 0 /* 時鐘內背景填充色 */
#define CENTER_COLOR 10 /* 中心圓填充色 */
#define SEC_HAND_COLOR 5 /* 秒針顏色 */
#define MIN_HAND_COLOR 7 /* 分針顏色 */
#define HOUR_HAND_COLOR 12 /* 時針顏色 */
#define NUM_COLOR 5 /* 數字顏色 */
#define NUM_SIZE 3 /* 數字大小 0-10 */
#define NUM_FONT 1 /* 數字字體 0-4 */
#define NUM_POSITION 175 /* 數字位置(半徑)最好小於 CIRCLE_SIZE_2 */
#define CIRCLE_SIZE_1 200 /* 最大的圓,從大到小,最好小於200,不然會覆蓋文字“小破鍾” */
#define CIRCLE_SIZE_2 190 /* 第二大圓,最好比各時針要大 */
#define CIRCLE_SIZE_3 7 /* 第三大圓,大於 3最好不要超過20,不美觀的*/
#define SEC_HAND_LENGTH 160 /* 秒針長度,以下從大到小,最好小於 CIRCLE_SIZE_2 */
#define MIN_HAND_LENGTH 130 /* 分針長度,最好比NUM_POSITION要小上10到20左右,不然秒針走一圈後數字有點殘缺 */
#define HOUR_HAND_LENGTH 110 /* 時針長度 */
#define RING_FILL_STYLE 9 /* 0-11 環填充方式 */
#define Y 0x1579
#define N 0x316e
int midx,midy,h,r1,key;
struct arccoordstype arci;
char xiao32H[]={
0x00,0x60,0x00,0x00, 0x00,0x60,0x00,0x00, 0x00,0x60,0x00,0x00, 0x00,0x60,0x00,0x00,
0x00,0x60,0x00,0x00, 0x0C,0x63,0x00,0x00, 0x0C,0x63,0x00,0x00, 0x0C,0x63,0x00,0x00,
0x18,0x61,0x80,0x00, 0x18,0x61,0x80,0x00, 0x18,0x60,0xC0,0x00, 0x30,0x60,0xE0,0x00,
0x30,0x60,0x60,0x00, 0x00,0x60,0x00,0x00, 0x00,0x60,0x00,0x00, 0x00,0x60,0x00,0x00,
0x01,0xE0,0x00,0x00, 0x01,0xC0,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00
};
char po32H[]={
0x00,0x06,0x00,0x00, 0x00,0x06,0x00,0x00, 0x7F,0x86,0x00,0x00, 0x7F,0xFF,0xE0,0x00,
0x0C,0x7F,0xE0,0x00, 0x0C,0x66,0x60,0x00, 0x18,0x66,0xC0,0x00, 0x1F,0x66,0x00,0x00,
0x3F,0x7F,0xC0,0x00, 0x7B,0x7F,0xC0,0x00, 0x7B,0x6C,0xC0,0x00, 0x1B,0x6D,0xC0,0x00,
0x1B,0x6D,0x80,0x00, 0x1F,0x6F,0x80,0x00, 0x1F,0x67,0x00,0x00, 0x1B,0x6F,0x80,0x00,
0x18,0xDD,0xE0,0x00, 0x00,0xD8,0xE0,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00
};
char zhong32H[]={
0x0C,0x06,0x00,0x00, 0x0C,0x06,0x00,0x00, 0x0C,0x06,0x00,0x00, 0x1F,0x06,0x00,0x00,
0x3F,0x7F,0xE0,0x00, 0x70,0x7F,0xE0,0x00, 0x7F,0x66,0x60,0x00, 0x1F,0x66,0x60,0x00,
0x0C,0x66,0x60,0x00, 0x0C,0x66,0x60,0x00, 0x3F,0x66,0x60,0x00, 0x3F,0x7F,0xE0,0x00,
0x0C,0x7F,0xE0,0x00, 0x0C,0x66,0x60,0x00, 0x0D,0x06,0x00,0x00, 0x0F,0x06,0x00,0x00,
0x0E,0x06,0x00,0x00, 0x0C,0x06,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00
};
char zuo16H[]={
0x18,0xC0,0x18,0xC0,0x19,0x80,0x31,0xFE,
0x33,0xFE,0x76,0xC0,0xF0,0xFC,0xB0,0xFC,
0x30,0xC0,0x30,0xC0,0x30,0xFE,0x30,0xFE,
0x30,0xC0,0x30,0xC0,0x30,0xC0,0x00,0x00,
};
char zhe16H[]={
0x03,0x00,0x03,0x0C,0x1F,0xCC,0x1F,0xD8,
0x03,0x30,0xFF,0xFE,0xFF,0xFE,0x03,0x00,
0x0F,0xF8,0x3F,0xF8,0xEC,0x18,0xCF,0xF8,
0x0C,0x18,0x0F,0xF8,0x0F,0xF8,0x00,0x00,
};
char mh16H[]={
0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
0x30,0x00, 0x30,0x00, 0x00,0x00, 0x00,0x00,
0x30,0x00, 0x30,0x00, 0x00,0x00, 0x00,0x00
};
char zhao16H[]={
0x0C,0x00, 0x0C,0x0C, 0x7F,0x8C, 0x7F,0xCC,
0x0C,0x6C, 0x0C,0x38, 0xFF,0x98, 0xFF,0xB8,
0x0C,0x38, 0x6F,0x6C, 0x6F,0xCC, 0x7C,0x84,
0x7C,0x00, 0xCF,0xFE, 0x87,0xFE, 0x00,0x00
};
char peng16H[]={
0x00,0x30, 0x77,0x7C, 0x77,0x7C, 0x55,0x64,
0x55,0x7C, 0x77,0x64, 0x55,0x6C, 0x55,0x60,
0x77,0x7E, 0x77,0x7E, 0x55,0x06, 0x55,0x76,
0x55,0x06, 0xD5,0x1E, 0xAB,0x0C, 0x00,0x00
};
/*圖形驅動初始化*/
void init(void)
{
int gdriver = DETECT, gmode, errorcode;
errorcode=registerbgidriver(EGAVGA_driver);
if(errorcode<0)
{
printf("Graphics error: %s", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
initgraph(&gdriver, &gmode,"" );
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
}
/* 畫圓並填充函數 */
void circle_fill(circle_line_color,fill_color,fill_style,radius,x)
int circle_line_color,fill_color,fill_style,radius,x;
{
setcolor(circle_line_color);
circle(midx,midy,radius);
setfillstyle(fill_style,fill_color);
floodfill(x,midy,circle_line_color);
}
/* 畫時鐘函數 */
void draw_clock(void)
{
int n;
char a[13][3],buf[20];
circle_fill(2,BK_COLOR,1,CIRCLE_SIZE_1,getmaxx());
circle_fill(2,RING_COLOR,RING_FILL_STYLE,CIRCLE_SIZE_1,midx+195);
circle_fill(8,CLOCK_BK_COLOR,1,CIRCLE_SIZE_2,midx+175);
for(n=1;n<12;n++) /* 畫時間數字 */
{
itoa(n,a[n],10);
setcolor(CLOCK_BK_COLOR);
arc(midx,midy,90,450-n*30,NUM_POSITION);
getarccoords(&arci);
settextstyle(NUM_FONT,0,NUM_SIZE);
settextjustify(1,1);
setcolor(NUM_COLOR);
outtextxy(arci.xend,arci.yend,a[n]);
outtextxy(midx+1,midy-178,"12");
}
}
/* 點陣字體轉換函數 */
void draw_mat(char *mat,int matsize,int x,int y,int color)
{
int i,j,k,m;
m=(matsize-1)/8+1;
for(j=0;j<matsize;j++)
for(i=0;i<m;i++)
for(k=0;k<8;k++)
if(mat[j*m+i]&(0x80>>k))
putpixel(x+i*8+k,y+j,color);
}
/* 輸出點陣文字 */
void show_character(void)/*input word*/
{
draw_mat(xiao32H,32,midx-50,10,0);
draw_mat(po32H,32,midx-10,10,0);
draw_mat(zhong32H,32,midx+30,10,0);
draw_mat(xiao32H,32,midx-49,11,14);
draw_mat(po32H,32,midx-9,11,14);
draw_mat(zhong32H,32,midx+31,11,14);
draw_mat(zuo16H,16,480,460,15);
draw_mat(zhe16H,16,498,460,15);
draw_mat(mh16H,16,516,460,15);
draw_mat(zhao16H,16,530,460,15);
draw_mat(peng16H,16,552,460,15);
}
/* 時針轉動函數 */
void hand(time,t,xp,yp,times_hand_color,hand_length,hour_or_not)
int *time,*t,*xp,*yp,times_hand_color,hand_length,hour_or_not;
{
setcolor(CLOCK_BK_COLOR);
if(hour_or_not==1)
{
arc(midx,midy,90,90-30*h-*time,hand_length);
if(*t==r1)
{
setcolor(CLOCK_BK_COLOR);
line(midx,midy,*xp,*yp);
}
r1=*time+1;
}
else
arc(midx,midy,90,90-*time*6,hand_length);
if(*t==*time&&hour_or_not!=1)
{
setcolor(CLOCK_BK_COLOR);
line(midx,midy,*xp,*yp);
}
*t=*time+1;
getarccoords(&arci);
*xp=arci.xend;
*yp=arci.yend;
setcolor(times_hand_color);
line(midx,midy,*xp,*yp);
}
void main(void)
{
int s,m,i=0,j=0,k=0,xs,ys,xm,ym,xh,yh,r,n;
char buf[20];
struct time t;
init();
midx = getmaxx()/ 2;
midy = getmaxy()/ 2;
while(1)
{
gettime(&t);
s=t.ti_sec;
m=t.ti_min;
xs=xm=xh=midx;
ys=ym=yh=midy;
draw_clock();
show_character();
while(!kbhit())
{
n=1;
gettime(&t);
h=t.ti_hour;
sprintf(buf,"%2d:%02d:%02d ",t.ti_hour, t.ti_min, t.ti_sec);
setcolor(15);
settextstyle(0,0,0);
settextjustify(1,1);
outtextxy(midx+6,midy+110,buf);
circle_fill(11,CENTER_COLOR,1,CIRCLE_SIZE_3,midx+3);
circle_fill(0,0,1,2,midx);
sleep(1);
s++;
if(s%60==0)
{
m++;
n=0;
}
r=m/2;
sound(24);
nosound();
hand(&s,&i,&xs,&ys,SEC_HAND_COLOR,SEC_HAND_LENGTH,0); /* 秒針轉動 */
if(n<2)
{
hand(&m,&j,&xm,&ym,MIN_HAND_COLOR,MIN_HAND_LENGTH,0); /* 分針轉動 */
hand(&r,&k,&xh,&yh,HOUR_HAND_COLOR,HOUR_HAND_LENGTH ,1); /* 時針轉動 */
}
n++;
setcolor(CLOCK_BK_COLOR);
outtextxy(midx+6,midy+110,buf);
}
setcolor(15);
outtextxy(midx+6,midy+140,"QUIT ?(Y/N)");
key=bioskey(0);
while(1)
{
key=bioskey(0);
if(key==Y||key==N)
break;
}
if(key==Y)
break;
}
closegraph();
}