要用C语言实现一个圆形时钟,我们需要使用图形库来绘制图形元素。用 EasyX 库在 Visual Studio 中绘制一个圆盘时钟是一个更简便的方法,因为 EasyX 是一个专为 Windows 开发的图形库,并且使用起来非常简单。

1、下载并安装 EasyX

EasyX 是一个基于 Windows 平台的简单易用的图形库,主要用于 C/C++ 程序设计教学和初学者图形编程入门。它的特点是接口简洁,功能实用,适合用于编写各种图形应用程序。解压下载的文件,并按照文档中的说明进行安装。

下载地址:https://easyx.cn/easyx

使用示例:

#include <graphics.h>
#include <conio.h>

int main() {
    // 初始化图形窗口
    initgraph(640, 480);  // 创建 640x480 的窗口

    // 设置绘图颜色
    setcolor(RED);

    // 绘制一个圆形
    circle(320, 240, 100);  // 以(320, 240)为中心,半径为100

    // 等待按键
    _getch();

    // 关闭图形窗口
    closegraph();
    return 0;
}

2、设置 Visual Studio

打开 Visual Studio,文件 -> 新建 -> 项目 -> Visual C++ -> 控制台应用,创建一个新的 Win32 控制台应用程序项目。如下图,

httpswwwcjavapycom

3、项目代码

使用 EasyX 库绘制圆盘时钟的完整代码,如下,

#include <graphics.h>
#include <math.h>
#include <time.h>
#include <conio.h>

#define PI 3.14159

void drawClockFace(int xCenter, int yCenter, int radius) {
	// 画圆
	circle(xCenter, yCenter, radius);

	// 画小时刻度
	for (int i = 0; i < 12; i++) {
		int angle = i * 30; // 360 / 12 = 每小时30度
		int xOuter = xCenter + (radius - 10) * cos(angle * PI / 180);
		int yOuter = yCenter + (radius - 10) * sin(angle * PI / 180);
		int xInner = xCenter + (radius - 20) * cos(angle * PI / 180);
		int yInner = yCenter + (radius - 20) * sin(angle * PI / 180);
		line(xOuter, yOuter, xInner, yInner);
	}
}

void drawHand(int xCenter, int yCenter, int length, double angle, COLORREF color) {
	int x = xCenter + length * cos(angle);
	int y = yCenter + length * sin(angle);
	setlinecolor(color);
	line(xCenter, yCenter, x, y);
}

void updateClock(int xCenter, int yCenter, int radius) {
	time_t rawtime;
	struct tm *timeinfo;

	time(&rawtime);
	timeinfo = localtime(&rawtime);

	int hours = timeinfo->tm_hour % 12;
	int minutes = timeinfo->tm_min;
	int seconds = timeinfo->tm_sec;

	// 将当前时间转换为角度
	double hourAngle = (hours + minutes / 60.0) * 30 * PI / 180 - PI / 2;
	double minuteAngle = (minutes + seconds / 60.0) * 6 * PI / 180 - PI / 2;
	double secondAngle = seconds * 6 * PI / 180 - PI / 2;

	// 画时钟指针
	drawHand(xCenter, yCenter, radius - 50, hourAngle, WHITE);
	drawHand(xCenter, yCenter, radius - 20, minuteAngle, WHITE);
	drawHand(xCenter, yCenter, radius - 10, secondAngle, RED);
}

int main() {
	int xCenter = 300;
	int yCenter = 300;
	int radius = 200;

	initgraph(600, 600);

	while (!_kbhit()) {
		cleardevice();
		drawClockFace(xCenter, yCenter, radius);
		updateClock(xCenter, yCenter, radius);
		Sleep(1000);
	}

	closegraph();
	return 0;
}

实现效果:

httpswwwcjavapycom

推荐文档