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

1.目标要求:

实现一个显示图像的时钟

2.C语言代码:


 	#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),&amp;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&amp;&amp;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库实现有图形界面钟表插图1

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

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

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

标签

发表评论