服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言基于EasyX库实现有图形界面钟表

C语言基于EasyX库实现有图形界面钟表

2022-11-02 11:55summery456 C/C++

这篇文章主要介绍了C语言基于EasyX库实现有图形界面钟表,直线转动端点计算,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言基于EasyX库实现有图形界面钟表的具体代码,供大家参考,具体内容如下

1.目标要求:

实现一个显示图像的时钟

2.C语言代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include<graphics.h> //需要提前下载EasyX库哦
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include<math.h>
 
#define High 480
#define Width 640//画布尺寸
#define PI 3.1415
/*
实现秒针的转动。定义secondAngle为秒针对应的角度,利用三角几何知识求出秒针的终点坐标:。
 
    secondEnd_ x= center_ x + secondLength * sin(secondAngle);
    secondEnd_ y= center_ y - secondLength * cos(secondAngle);
 
    让角度secondAngle循环变化,即实现了秒针转动的动画效果。
*/
 
void HideCursor(){    //隐藏光标位置 ,这个函数复制代码就行 
    CONSOLE_CURSOR_INFO cursor_info={1,0}; 
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
 
int IsEnd;//是否结束 
int center_x,center_y;//中点
int second_long;//长度
int second_x,second_y;//秒针位置
int minute_long;//长度
int minute_x,minute_y;//分针位置
int hour_long;//长度
int hour_x,hour_y;//时针位置
int second_num,minute_num,hour_num;//秒针分针时针计数用的
 
void startup(){    //【数据初始化】 
    
    HideCursor();//不显示光标 
    IsEnd = 0;    
    initgraph(Width,High);//展示画布
 
    center_x=Width/2;
    center_y=High/2;//中心点信息
 
    second_long= (Width>High)? High/4:Width/4;
    second_x=center_x;
    second_y = center_y-second_long;//秒针信息
 
    minute_long=second_long*4/5;
    minute_x=center_x;
    minute_y = center_y-minute_long;//分针信息
 
    hour_long=second_long*2/3;
    hour_x=center_x;
    hour_y = center_y-hour_long;//时针信息
    second_num=0;
    minute_num=0;
    hour_num=0;
    
}
void show_begin(){//【初始页面展示】 
    BeginBatchDraw();//批量绘图开始
void show(){    //【显示画面】 
    int i;
    
    setlinestyle(PS_SOLID,2);//设置线型为实线,线宽为2
    setcolor(DARKGRAY);//设置颜色为暗灰色
    setfillcolor(DARKGRAY);//设置填充颜色也为暗灰色
    fillcircle(center_x,center_y,second_long*5/4);//画表盘外圆
    setcolor(LIGHTGRAY);//设置颜色亮灰色
    setfillcolor(LIGHTGRAY);//设置填充颜色为亮灰色
    fillcircle(center_x,center_y,second_long*6/5);//填充表盘背景
    for(i=0;i<=59;i++){//画表盘上的刻度
        setcolor(BLACK);
        if(i%5==0){//每个小时点线长更长
            line(
            (center_x+second_long*15/14*sin(((2*PI)/60)*i)),
            (center_y-second_long*15/14*cos(((2*PI)/60)*i)),
            (center_x+second_long*6/5*sin(((2*PI)/60)*i)),
            (center_y-second_long*6/5*cos(((2*PI)/60)*i))
            );
        }else line(
            (center_x+second_long*8/7*sin(((2*PI)/60)*i)),
            (center_y-second_long*8/7*cos(((2*PI)/60)*i)),
            (center_x+second_long*6/5*sin(((2*PI)/60)*i)),
            (center_y-second_long*6/5*cos(((2*PI)/60)*i))
            );
    }
 
 
    setlinecolor(YELLOW);//设置线条颜色黄色
    setlinestyle(PS_SOLID,3);//设置线条风格为实线,线宽为3
    line(center_x,center_y,second_x,second_y);//画秒针
    setlinecolor(BLUE);//设置颜色
    setlinestyle(PS_SOLID,4);//设置线条风格实线,线宽为4
    line(center_x,center_y,minute_x,minute_y);//画分针
    setlinecolor(RED);//设置颜色
    setlinestyle(PS_SOLID,6);//设置线条风格实线,线宽3
    line(center_x,center_y,hour_x,hour_y);//画时针
 
 
    FlushBatchDraw();//更新一次画面,解决画面闪的问题,需要配合BeginBatchDraw函数使用
    Sleep(1000);//延时
    cleardevice();//清除之前的画迹
    
    
}
void update_outinput(){    //【与输入无关的更新】 
    
    second_num = (second_num==59)? 0:second_num+1;//秒针为59下一次是0
    second_x=center_x+second_long*sin(((2*PI)/60)*second_num);//计算秒针端点位置
    second_y=center_y-second_long*cos(((2*PI)/60)*second_num);
    if(second_num==0){//如果秒针到0了分针加一
        minute_num = (minute_num==59)? 0:minute_num+1;//分针为59下一次是0
        minute_x=center_x+minute_long*sin(((2*PI)/60)*minute_num);//计算分针端点位置
        minute_y=center_y-minute_long*cos(((2*PI)/60)*minute_num);
    }
    if(minute_num%12==0&&second_num==0){//如果分针到0了且秒针也为0时,时针加1
        hour_num = (hour_num==59)? 0:hour_num+1;//时针为59下一次是0
        hour_x=center_x+hour_long*sin(((2*PI)/60)*hour_num);//计算时针端点位置
        hour_y=center_y-hour_long*cos(((2*PI)/60)*hour_num);
    }
    
}
void update_input(){//【与输入有关的更新】 
    char input;
    if(kbhit()){
        input = getch();
                
    }
}
void show_end(){//【显示失败界面】 
    EndBatchDraw();
}
 
int main(){
    startup();    //数据初始化
    show_begin();//初始页面 
    while(!IsEnd){    //游戏循环执行 
        show();    // 显示画面 
        update_outinput();    //与输入无关的更新 
        update_input();    //与输入有关的更新 
    }
    show_end(); //显示失败界面 
    return 0;
}

3.运行结果:

C语言基于EasyX库实现有图形界面钟表

C语言基于EasyX库实现有图形界面钟表

C语言基于EasyX库实现有图形界面钟表

C语言基于EasyX库实现有图形界面钟表

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_43503632/article/details/105482750

延伸 · 阅读

精彩推荐