200高分 C语言程序设计 画图 问题 (WinTC)
完成一个图形时钟,要求以图形的方式绘制时钟,时针、分针和秒针随时间的变化而变化。以系统的时间为准
提示:
1、 使用setwritemode(int mode)函数。当mode=0时可将画线时原位置的信息覆盖。当mode=1时,画的线是与原来进行异或后的结果。
2、 可以设计一个函数专用画时、分、秒针的,需要有3个参数:半径,当时的时间(时、分、秒),每时、分、秒转过的角度。
3、 设计一个钟面函数,包括有背景色的钟面,有各分、各秒的刻度(这时需要计算这线段的两端点的横、纵坐标——用正、余弦函数)。
4、 需要用到时间结构体,通过gettime()函数获取系统时间。
jtemail@163.com
可贴,亦可发邮箱。 展开
/* WIN-TC BGI 图形编程模板 */
#include <dos.h>
#include <math.h>
#include "Conio.h"
#include "graphics.h"
#define closegr closegraph
#define PI 3.14
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd, &gm, "");
}
int main(void)
{
int r = 200;
int cx;
int cy;
int i;
int x1;
int x2;
int y1;
int y2;
int x3;
int y3;
int xh;
int yh;
int xm;
int ym;
int xs;
int ys;
int r_h = 120;
int r_m = 150;
int r_s = 180;
struct time t;
initgr(); /* BGI初始化 */
/*****此部分添加你自己的代码,例如
line(25, 25, 220, 220);
circle(100, 100, 50);
等等*****/
cleardevice();
setwritemode(XOR_PUT);
setbkcolor(BLUE);
setcolor(RED);
cx = getmaxx()/2;
cy = getmaxy()/2;
circle(cx,cy,r);
for(i=1;i<=60;i++)
{
setcolor(YELLOW);
if(i%5==0)
{
x3 = cx + (r-10)*sin(i*PI/30);
y3 = cy + (r-10)*cos(i*PI/30);
setfillstyle(SOLID_FILL,GREEN);
fillellipse(x3,y3,10,10);
}
else
{
x1 = cx + r*sin(i*PI/30);
y1 = cy - r*cos(i*PI/30);
x2 = cx + (r-10)*sin(i*PI/30);
y2 = cy - (r-10)*cos(i*PI/30);
line(x1,y1,x2,y2);
}
}
while(1)
{
gettime(&t);
xh = cx + r_h*sin(t.ti_hour%12*PI/6 + t.ti_min*PI/360);
yh = cy - r_h*cos(t.ti_hour%12*PI/6 + t.ti_min*PI/360);
xm = cx + r_m*sin(t.ti_min*PI/30 + t.ti_sec*PI/3600);
ym = cy - r_m*cos(t.ti_min*PI/30 + t.ti_sec*PI/3600);
xs = cx + r_s*sin(t.ti_sec*PI/30);
ys = cy - r_s*cos(t.ti_sec*PI/30);
setcolor(YELLOW);
line(cx,cy,xh,yh);
line(cx,cy,xm,ym);
setcolor(RED);
line(cx,cy,xs,ys);
sleep(1);/*这个地方可能会很头疼 */
setcolor(YELLOW);
line(cx,cy,xh,yh);
line(cx,cy,xm,ym);
setcolor(RED);
line(cx,cy,xs,ys);
}
getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
closegr(); /* 恢复TEXT屏幕模式 */
return 0;
}
dosbox上跑程序 抓图