标题:关于一个钟表编程,求助!
只看楼主
liangbo520
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2004-11-9
 问题点数:0 回复次数:11 
关于一个钟表编程,求助!

题目是要求用纯C程编一个于电脑时间同步走的,显示3根走动的针,外面要有一个表盘的钟。(最好下面还带数字显示几点的)。还要求每走一格秒针表盘不会闪烁。这种题比较麻烦,还请各位高手帮帮忙,做一个看看。谢谢了先!

搜索更多相关主题的帖子: 钟表 表盘 时间同步 
2004-11-09 16:58
忆楠
Rank: 1
等 级:新手上路
帖 子:721
专家分:0
注 册:2004-7-5
得分:0 
#include "stdlib.h" #include "conio.h" #include "stdio.h" #include "graphics.h" #include "math.h" #include "dos.h" #define BB 3.14159/180

void InitGra(void); void SysTime(int x, int y, int r); int Clock(int x, int y, int r); void ClockPict(int x, int y, int r);

int main(void) { int x, y, r; /* 定义表盘的中心及半径 */ x = 310; y = 240; r = 42; InitGra(); SysTime(x, y, r); closegraph(); return(0); }

void InitGra(void) { int GraphDrive = DETECT, GraphMode; registerbgidriver(EGAVGA_driver); initgraph(&GraphDrive, &GraphMode, ""); }

void SysTime(int x, int y, int r) /* 表盘中心坐标, 半径 */ { ClockPict(x, y, r); while ((Clock(x, y, r) != 1) && (! kbhit())); /* 钟表运行直到按键为止 */ }

int Clock(int x, int y, int r) /* 表盘中心, 表盘半径 */ { float hr, mt, sd, dh, dm, ds, ds0; int i, Fst = 1; union REGS in, out; setcolor(0); setfillstyle(1, 0); pieslice(x, y, 0, 360, r-11); in.h.ah = 0x2c; int86(0x21, &in, &out); hr = out.h.ch; /* 时 */ mt = out.h.cl; /* 分 */ sd = out.h.dh; /* 秒 */ if (hr > 12) hr = hr-12; hr = hr+mt/60; dh = 270+30*hr;if (dh > 360) dh = dh-360; dh = dh*BB; dm = 270+6*mt; if (dm > 360) dm = dm-360; dm = dm*BB; ds = 270+6*sd; if (ds > 360) ds = ds-360; ds = ds*BB; setcolor(15); setlinestyle(0, 0, 3); line(x, y, x+(r-20)*cos(dh), y+(r-20)*sin(dh)); /* 画时针 */ setlinestyle(0,0,1); line(x, y, x+(r-15)*cos(dm), y+(r-15)*sin(dm)); /* 画分针 */ setwritemode(XOR_PUT); for (i = 0; i < 300; i++) { in.h.ah = 0x2c; /* 循环内执行秒针的走动 */ int86(0x21, &in, &out); sd = out.h.dh; ds = 270+6*sd; if (ds > 360) ds = ds-360; ds = ds*BB; if (Fst) ds0 = ds; setlinestyle(0, 0, 1); setcolor(12); if (!Fst) line(x,y,x+(r-12)*cos(ds0),y+(r-12)*sin(ds0)); /* 擦去原秒针*/ line(x, y, x+(r-12)*cos(ds), y+(r-12)*sin(ds)); /* 重画秒针 */ ds0 = ds; Fst = 0; if (kbhit()) return (1); /* 如果有按键, 返回 */ else delay(100); } }

void ClockPict(int x, int y, int r) /* 画表盘 */ { float af; int i, Dlt; setwritemode(COPY_PUT); setlinestyle(0,0,1); setcolor(0); setfillstyle(1,0); pieslice(x, y, 0, 360, r+2); setcolor(14); circle(x, y, r); line(x+r+5, y-2, x+r+10, y-2); line(x+r+5, y+2, x+r+10, y+2); setlinestyle(0,0,3); rectangle(x+r+5, y-6, x+r+10, y+6); circle(x, y, r+5); for (i = 0; i < 360; i += 30) /* 画表的时刻刻度 */ { af = i*BB; if (i==0 || i==90 || i==180 || i==270) Dlt = 8; /* 3,6,9,12点刻度稍长*/ else Dlt = 5; line(x+(r-Dlt)*cos(af), y+(r-Dlt)*sin(af), x+r*cos(af), y+r*sin(af)); } }

getch();

[此贴子已经被作者于2004-11-09 22:27:12编辑过]


点 鼠 标 , 救 饥 民 http://www./
2004-11-09 18:19
liangbo520
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2004-11-9
得分:0 
高手,大虾,谢谢帮忙!!
2004-11-09 21:35
liangbo520
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2004-11-9
得分:0 
Linker Error: Undefined symbol '_EGAVGA_driver' in module O'CLOCK.H是那里错了,小弟不怎么懂啊。?[em48]
2004-11-09 21:50
忆楠
Rank: 1
等 级:新手上路
帖 子:721
专家分:0
注 册:2004-7-5
得分:0 

你用的什么编译器? 用wintc可以编译成功的..........你用win-tc 1.8试试看 别的编译器我没有试过

[此贴子已经被作者于2004-11-09 22:28:34编辑过]


点 鼠 标 , 救 饥 民 http://www./
2004-11-09 22:25
liangbo520
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2004-11-9
得分:0 
o  ,我用的是TC2。0啊,我再试试吧,。
2004-11-10 13:11
drwooder
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-8-29
得分:0 

连接时出了问题,一个常量没有定义,你只要再定义下就OK了
for example:
#define EGAVGA_driver=10;
^_^这个问题我也搞了很久才明白那时个常量
菜鸟qq404369768,有高手能跟给我回答问题吗

2006-08-29 23:05
jxk821015
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2006-8-22
得分: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*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(7);
d(150,h,30);
setcolor(14);
d(170,m,6);
setcolor(4);
d(190,s,6);
while(!kbhit())
{while(t[0].ti_sec==s)
gettime(t);
sound(400);
delay(70);
sound(200);
delay(30);
nosound();
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();
}
}
getch();
closegraph();
}

2006-09-02 10:29
haishanglang
Rank: 1
等 级:新手上路
帖 子:378
专家分:0
注 册:2006-3-2
得分:0 
都是高人啊,顶!

2006-09-02 12:25
merrylife
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-9-3
得分:0 
呵呵,我刚学,楼上的都是高手,景仰!
顶!
2006-09-03 12:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-7366-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.208392 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved