⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.cpp

📁 一个在电脑上运行的时钟
💻 CPP
字号:
/**
*	Title	CLOCK.cpp
*
*  	Created on 2009-3-30
*      	@Author ShaunChxion
*			@Email shaunchyxion@163.com
*				@Shaun All Rights reserved.
*
*/
/****************************************************
	    			ClocMainFction.cpp
-----------------------------------
[文件]
					(i)		Clock.cpp		主程序
				   	(ii)		winbgi.cpp
				  	(iii)	source.cpp
				  	(iv) 	graphics.h
				  	(v)		Clock.h
					(vi)		figure.cpp
					(vii)	figure.h

****************************************************************/

#include <cmath>
#include <ctime>
#include <iostream>
#include "graphics.h"
#include "Clock.h"
#include "figure.h"

//记录鼠标点击opinions状态
int clickOp = FALSE;	

class Clock
{
public:
	//构造函数
	explicit Clock(int hour=0, int minute=0, int second=0)
	{
		this->hour = hour;
		this->minute = minute;
		this->second = second;
	}
	
	//得到时间
	void getTime(int h, int m, int s);
	//绘制时针
	void DrawHourHand(void);
	//绘制分针
	void DrawMinuteHand(void);
	//绘制秒针
	void DrawSecondHand(void);
	
private:
	int hour;
	int minute;
	int second;
	
	//时针与12点方向的夹角
	int hour_angle;
	//分针与12点方向的夹角
	int minute_angle;
	//秒针与12点方向的夹角
	int second_angle;
};

int main(void)
{

	initwindow(800,680);
	setbkcolor(LIGHTGRAY);
	cleardevice();
	Clock CLOCK(0,0,0);
	
	outInfo();	//桌面信息
	whiteAndBlack();	//默认白加黑模式
	
	while(1)	//时间一旦开始,便不停歇
	{
		//获得系统时间
		time_t curtime = time(0);   
		tm tim = *localtime(&curtime); 
		//将的的时间存入时钟
		CLOCK.getTime(tim.tm_hour,
					 tim.tm_min,
					 tim.tm_sec);
		
		//刷新表盘			 
		clearDial();
		//显示时钟指针
		CLOCK.DrawHourHand();
		CLOCK.DrawMinuteHand();
		CLOCK.DrawSecondHand();
				
		if (mousedown())
		{
			int x = mouseclickx();
			int y = mouseclicky();
			clearmouse();
			
			//点击opinions
			if (clickOpinions(x, y))	
			{
				displayMenu();	//展示选项菜单
				clickOp = TRUE;
			}
			
			//点击菜单选项
			/**
			*	@要求:
			*	先点击opinions,
			*	并且点击范围在菜单内,
			*
			*/
			if (clickOp == TRUE &&
				clickBranch(x, y))
			{
				//将纵坐标转换成选项号
				//其中(OY+35)为菜单上底纵坐标
				//30是选项框高
				int grade = (y - (OY + 35))/30;

				displayMenu();	//刷新选项框
				clickResult(grade);	//造成选项点击效果
			}
						
		}
		delay(500);	
	}
	
	
	getch();
	closegraph();
	return 0;
}


//获得时间
void Clock::getTime(int hour, int minute, int second)	
{
	//将新时间存入时钟
	this->hour = hour;
	this->minute = minute;
	this->second = second;
	//改变指针的角度
	hour_angle = 30 * (hour % 12) + (minute / 12) * 6;
	minute_angle = 6 * minute;
	second_angle = 6 * second;
}

//绘制时针
void Clock::DrawHourHand(void)
{
	int h_x = centrex + hour_radius * sin(hour_angle * pi / 180);
	int h_y = centrey - hour_radius * cos(hour_angle * pi / 180);
	setcolor(DARKGRAY);
	setlinestyle(1,0,3);
	line(centrex, centrey, h_x, h_y);
}

//绘制分针
void Clock::DrawMinuteHand(void)
{
	int m_x = centrex + minute_radius * sin(minute_angle * pi / 180);
	int m_y = centrey - minute_radius * cos(minute_angle * pi / 180);
	setcolor(YELLOW);
	setlinestyle(0,0,2);
	line(centrex, centrey, m_x, m_y);
}

//绘制秒针
void Clock::DrawSecondHand(void)
{	
	//指针顶点坐标
	int s_x = centrex + second_radius * sin(second_angle * pi / 180);
	int s_y = centrey - second_radius * cos(second_angle * pi / 180);
	setlinestyle(0, 4, 1);
	setcolor(LIGHTRED);
	line(centrex, centrey, s_x, s_y);
	setcolor(DARKGRAY);
	circle(centrex, centrey,15);
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -