C语言实现炫酷时钟

C语言实现炫酷时钟

看效果图

炫酷时钟

直接上代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <math.h>
#include <time.h>

#define PI 3.1415926
#define width 1000//窗口宽度
#define height 800//窗口高度

TCHAR month[][12] = { _T("一月"),_T("二月"),_T("三月"),_T("四月"),_T("五月"),_T("六月"),_T("七月"),_T("八月"),_T("九月"),_T("十月"),_T("十一月"),
_T("十二月") };
TCHAR day[][31] = { _T("一日"), _T("二日"), _T("三日"), _T("四日"), _T("五日"), _T("六日"), _T("七日"), _T("八日"), _T("九日"), _T("十日"), _T("十一日"),
_T("十二日"), _T("十三日"), _T("十四日"), _T("十五日"), _T("十六日"), _T("十七日"), _T("十八日"), _T("十九日"),_T("二十日"),_T("二十一日"),_T("二十二日"),
_T("二十三日"), _T("二十四日"), _T("二十五日"), _T("二十六日"), _T("二十七日"), _T("二十八日"), _T("二十九日"), _T("三十日"), _T("三十一日") };
TCHAR week[][7] = { _T("星期天"),_T("星期一"),_T("星期二"),_T("星期三"),_T("星期四"),_T("星期五"),_T("星期六") };
TCHAR hour[][24] = { _T("零时"),_T("一时"),_T("二时"),_T("三时"),_T("四时"),_T("五时"),_T("六时"),_T("七时"),_T("八时"),_T("九时"),_T("十时"),_T("十一时"),
_T("十二时"), _T("十三时"), _T("十四时"), _T("十五时"), _T("十六时"), _T("十七时"), _T("十八时"), _T("十九时"), _T("二十时"), _T("二十一时"), _T("二十二时"),
_T("二十三时") };
TCHAR minute[][60] = { _T("零分"),_T("一分"),_T("两分"), _T("三分"), _T("四分"), _T("五分"), _T("六分"), _T("七分"), _T("八分"), _T("九分"), _T("十分"), _T("十一分"),
_T("十二分"), _T("十三分"), _T("十四分"), _T("十五分"), _T("十六分"), _T("十七分"), _T("十八分"), _T("十九分"), _T("二十分"), _T("二十一分"), _T("二十二分"),
_T("二十三分"), _T("二十四分"), _T("二十五分"), _T("二十六分"), _T("二十七分"), _T("二十八分"), _T("二十九分"), _T("三十分"), _T("三十一分"),
_T("三十二分"), _T("三十三分"), _T("三十四分"), _T("三十五分"), _T("三十六分"), _T("三十七分"), _T("三十八分"), _T("三十九分"), _T("四十分"),
_T("四十一分"), _T("四十二分"), _T("四十三分"), _T("四十四分"), _T("四十五分"), _T("四十六分"), _T("四十七分"), _T("四十八分"), _T("四十九分"),
_T("五十分"), _T("五十一分"), _T("五十二分"),_T("五十三分"),_T("五十四分"),_T("五十五分"),_T("五十六分"),_T("五十七分"),_T("五十八分"),
_T("五十九分") };
TCHAR second[][60] = { _T("零秒"),_T("一秒"),_T("两秒"), _T("三秒"), _T("四秒"), _T("五秒"), _T("六秒"), _T("七秒"), _T("八秒"), _T("九秒"), _T("十秒"), _T("十一秒"),
_T("十二秒"), _T("十三秒"), _T("十四秒"), _T("十五秒"), _T("十六秒"), _T("十七秒"), _T("十八秒"), _T("十九秒"), _T("二十秒"), _T("二十一秒"), _T("二十二秒"),
_T("二十三秒"), _T("二十四秒"), _T("二十五秒"), _T("二十六秒"), _T("二十七秒"), _T("二十八秒"), _T("二十九秒"), _T("三十秒"), _T("三十一秒"),
_T("三十二秒"), _T("三十三秒"), _T("三十四秒"), _T("三十五秒"), _T("三十六秒"), _T("三十七秒"), _T("三十八秒"), _T("三十九秒"), _T("四十秒"),
_T("四十一秒"), _T("四十二秒"), _T("四十三秒"), _T("四十四秒"), _T("四十五秒"), _T("四十六秒"), _T("四十七秒"), _T("四十八秒"), _T("四十九秒"),
_T("五十秒"), _T("五十一秒"), _T("五十二秒"),_T("五十三秒"),_T("五十四秒"),_T("五十五秒"),_T("五十六秒"),_T("五十七秒"),_T("五十八秒"),
_T("五十九秒") };

int main()
{
	time_t timep;
	struct tm *p;
	time(&timep);
	p = gmtime(&timep);
	initgraph(width, height);//定义窗口大小

	int i, y, mon, d, w, h, min, s;
	int days;
	TCHAR str[5];
	y = p->tm_year + 1900;//获取年份
	mon = p->tm_mon;//获取月份
	d = p->tm_mday - 1;//获取日期
	w = p->tm_wday;//获取星期几
	h = p->tm_hour + 8;//获取小时
	min = p->tm_min;//获取分钟
	s = p->tm_sec;//获取秒

	_stprintf(str, _T("%d"), y);//将年份格式化输出为字符串

	switch (mon)//判断一个月有多少天,考虑闰年2月有29天,平年2月有28天
	{
	case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31; break;
	case 4:case 6:case 9:case 11:days = 30; break;
	case 2:days = (y % 400 == 0 || y % 4 == 0 && y % 100 != 0) ? 29 : 28; break;
	}

	while (1)
	{
		loadimage(NULL, L"1.jpg", width, height);//贴背景图
		//画年份
		settextstyle(16, 0, _T("楷体"), 0, 0, 1, 0, 0, 0);
		outtextxy(486, 395, str);
		//画月份
		for (i = 0; i < 12; i++)
		{
			settextstyle(14, 0, _T("楷体"), 300 * i, 300 * i, 1, 0, 0, 0);
			outtextxy(width / 2 + 25 * cos(PI / 6 * i), height / 2 - 25 * sin(PI / 6 * i), month[(i+mon)%12]);
		}
		//画日期
		for (i = 0; i < 31; i++)
		{
			settextstyle(14, 0, _T("楷体"), 116 * i, 116 * i, 1, 0, 0, 0);
			outtextxy(width / 2 + 80 * cos(PI / 15.5 * i), height / 2 - 80 * sin(PI / 15.5 * i), day[(i + d) % days]);
		}
		//画星期
		for (i = 0; i < 7; i++)
		{
			settextstyle(14, 0, _T("楷体"), 514 * i, 514 * i, 1, 0, 0, 0);
			outtextxy(width / 2 + 150 * cos(PI / 3.5 * i), height / 2 - 150 * sin(PI / 3.5 * i), week[(i + w) % 6]);
		}
		//画小时
		for (i = 0; i < 24; i++)
		{
			settextstyle(14, 0, _T("楷体"), 150 * i, 150 * i, 1, 0, 0, 0);
			outtextxy(width / 2 + 210 * cos(PI / 12 * i), height / 2 - 210 * sin(PI / 12 * i), hour[(i + h) % 24]);
		}
		//画分钟
		for (i = 0; i < 60; i++)
		{
			settextstyle(14, 0, _T("楷体"), 60 * i, 60 * i, 1, 0, 0, 0);
			outtextxy(width / 2 + 270 * cos(PI / 30 * i), height / 2 - 270 * sin(PI / 30 * i), minute[(i + min) % 60]);
		}
		//画秒
		for (i = 0; i < 60; i++)
		{
			settextstyle(14, 0, _T("楷体"), 60 * i, 60 * i, 1, 0, 0, 0);
			outtextxy(width / 2 + 330 * cos(PI / 30 * i), height / 2 - 330 * sin(PI / 30 * i), second[(i + s) % 60]);
		}
		s++;
		if (s > 59)
		{
			s = 0; min++;
		}
		if (min > 59)
		{
			min = 0; h++;
		}
		if (h > 23)
		{
			h = 0; d++;
		}
		if (d > days)
		{
			d = 1; mon++;
		}
		if (mon > 12)
		{
			mon = 0; y++;
		}

		Sleep(1000);
		cleardevice();//清屏
	}
	system("pause");
	return 0;
	}

知识点

  1. 已知圆心(x,y),半径r,求圆上点(a,b)坐标:
    a = x + r * cos(A);
    b = y + r * sin(A);

  2. 判断闰年的方法:能被400整除,能被4整除且不能被100整除

  3. 用到EasyX相关函数
    设置字体样式:

	void settextstyle(
    int nHeight,//字体高度
    int nWidth,//字体宽度。0,比例自适应
    LPCTSTR lpszFace,//字体名称
    int nEscapement,//字符串的书写角度,单位0.1度
    int nOrientation,//每个字符的书写角度,单位0.1度
    int nWeight,//字符粗细
    bool bItalic,//是否斜体,true / false
    bool bUnderline,//是否有下划线,true / false
    bool bStrikeOut//是否有删除线,true / false
);

在指定位置输出字符串:

void outtextxy(
    int x,//字符串输出时头字母的 x 轴的坐标值 
    int y,//字符串输出时头字母的 y 轴的坐标值
    LPCTSTR str//待输出的字符串 

);
  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值