c语言死循环满屏,c语言有滴答声音的全屏模拟时钟要求核心代码在50行以上,程......

#include#define pi 3.1415926

#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300;

#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240;

#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y);

void init()

{

int i,l,x1,x2,y1,y2;

setbkcolor(1);

circle(300,240,200);

circle(300,240,205);

circle(300,240,5);

for(i=0;i<60;i++)

{

if(i%5==0) l=15;

else l=5;

x1=200*cos(i*6*pi/180)+300;

y1=200*sin(i*6*pi/180)+240;

x2=(200-l)*cos(i*6*pi/180)+300;

y2=(200-l)*sin(i*6*pi/180)+240;

line(x1,y1,x2,y2);

}

}

main()

{

int x,y;

int gd=VGA,gm=2;

unsigned char h,m,s;

struct time t[1];

initgraph(&gd,&gm,“d:\\tc”);

init();

setwritemode(1);

gettime(t);

h=t[0]。ti_hour;

m=t[0]。ti_min;

s=t[0]。ti_sec;

setcolor(2);

d(150,h,30);

setcolor(13);

d(170,m,6);

setcolor(15);

d(190,s,6);

while(!kbhit())

{

while(t[0]。ti_sec==s)

gettime(t);

sound(100);

delay(70);

sound(200);

delay(30);

nosound();

setcolor(15);

d(190,s,6);

s=t[0]。ti_sec;

d(190,s,6);

if (t[0]。ti_min!=m)

{

setcolor(13);

d(170,m,6);

m=t[0]。ti_min;

d(170,m,6);

}

if (t[0]。ti_hour!=h)

{

setcolor(2);

d(150,h,30);

h=t[0]。ti_hour;

d(150,h,30);

sound(300);

delay(240);

nosound();

delay(140);

sound(400);

delay(240);

nosound();

}

}

getch();

closegraph();

}

1。这是用windows api写的程序。所以要求是纯c的话就没有办法了

2。其中定时用了两种方法。一种是用取消息。另一种是延时队列。这里只使用了取消息的方法。延时队列由于我机器上是vc6.0,CreateTimerQueue在本人机器上无法使用,需要新的sdk,所以没有加以验证,但取消息的方式是可行的。

3。稍稍验证了下,基本满足要求。

我在TC上调试通过了,不过时间好像过了额。。。

/*开发环境:turbo c 2.0模拟时钟转动程序代码*/

#include“graphics。h”

#include“math。h”

#include“dos。h”

#define pi 3.1415926

#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300

#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240

#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y)

void init() /*划时钟边框函数*/

{

int i,l,x1,x2,y1,y2;

setbkcolor(1);

circle(300,240,200);

circle(300,240,205);

circle(300,240,5);

for(i=0;i<60;i++) /*划钟点上的短线*/

{

if(i%5==0)

l=15;

else

l=5;

x1=200*sin(i*6*pi/180)+300;

y1=200*cos(i*6*pi/180)+240;

x2=(200-l)*sin(i*6*pi/180)+300;

y2=(200-l)*cos(i*6*pi/180)+240;

line(x1,y1,x2,y2);

}

}

main()

{

int x,y,i,k=1;

int gdriver=9,gmode=2;

unsigned char h,m,s;

int o,p,q;

float n;

struct time t[1];

struct date d[1];

initgraph(&gdriver,&gmode,“c:\\tc”);

initgraph(&gdriver,&gmode,“c:\\tc”);

for(i=0;i<=6;i++)

{

settextstyle(TRIPLEX_FONT,HORIZ_DIR,i); /*控制输出字符的字体,方向,大小*/

cleardevice();

settextjustify(1,1); /*在指定坐标上输出字符串*/

outtextxy(300,80,“12”) ;

outtextxy(300,390,“6”);

outtextxy(140,230,“9”);

outtextxy(460,230,“3”);

outtextxy(380,100,“1”);

outtextxy(220,100,“11”);

outtextxy(430,160,“2”);

outtextxy(430,310,“4”);

outtextxy(380,370,“5”);

outtextxy(220,370,“7”);

outtextxy(160,160,“10”);

outtextxy(160,310,“8”);

}

init();

setwritemode(1); /*设置画线的输出模式*/

if(k!=0)

{

getdate(d); /*获得系统日期函数*/

o=d[0]。da_year;

p=d[0]。da_mon;

q=d[0]。da_day;

gettime(t); /*获得系统时间函数*/

h=t[0]。ti_hour;

m=t[0]。ti_min;

s=t[0]。ti_sec;

}

setcolor(7); /*设置时针颜色*/

n=(float)h+(float)m/60;

d(150,n,30); /*画出时针*/

setcolor(14); /*设置分针颜色*/

d(170,m,6); /*画出分针*/

setcolor(4); /*设置秒针颜色*/

d(190,s,6); /*画出秒针*/

while(!kbhit()) /*控制程序按下任意键退出*/

{

while(t[0]。ti_sec==s)

gettime(t);

gotoxy(44,18); /*使光标移动到指定坐标*/

printf(“\b\b\b\b\b\b\b\b\b”); /*退格,使表示时间的字符串不断变化*/

sound(400); /*按给定的频率打开PC扬声器*/

delay(70); /*中断程序的执行,时间为70毫秒*/

sound(200);

delay(30);

nosound(); /*按给定的频率关闭PC扬声器*/

setcolor(4);

d(190,s,6);

s=t[0]。ti_sec;

d(190,s,6);

if(t[0]。ti_min!=m)

{

setcolor(14);

d(170,m,6);

m=t[0]。ti_min;

d(170,m,6);

}

if(t[0]。ti_hour!=h)

{

setcolor(7);

d(150,h,30);

h=t[0]。ti_hour;

d(150,h,30);

sound(1000);

delay(240);

nosound();

delay(140);

sound(2000);

delay(240);

nosound();

}

if(s<10) /*用字符的形式输出时间*/

{ if(m<10)

printf(“%u:0%u:0%u”,h,m,s);

else

printf(“%u:%u:0%u”,h,m,s);

}

else

{ if(m<10)

printf(“%u:0%u:%u”,h,m,s);

else

printf(“%u:%u:%u”,h,m,s);

}

gotoxy(34,19); /*在指定坐标上输出日期*/

printf(“%d年%d月%d日”,o,p,q);

printf(“\b\b\b\b\b\b\b\b\b”);

}

getch();

closegraph();

}

本文标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值