使用C语言提供的函数功能, 绘制一个时钟表盘,编程实现倒计时1分钟,秒针每走一圈,分针走一格,同时文字显 示“倒计时*分钟开始” 倒计时达到1分钟就停
时间: 2024-02-18 14:03:00 浏览: 155
好的,以下是使用C语言绘制时钟表盘,实现倒计时1分钟的代码,同时每秒钟秒针走一圈,分针走一格,文字显示倒计时开始,倒计时达到1分钟后停止:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <windows.h>
#define PI 3.14159265358979323846
void gotoxy(int x, int y) // 设置光标位置函数
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void draw_clock() // 绘制时钟表盘函数
{
int i, x, y;
double angle;
for (i = 1; i <= 12; i++) // 绘制小时刻度
{
angle = PI / 6 * (i - 3);
x = 25 * cos(angle) + 30;
y = 12 * sin(angle) + 12;
gotoxy(x, y);
printf("%d", i);
}
for (i = 0; i < 60; i++) // 绘制分钟刻度
{
angle = PI / 30 * (i - 15);
x = 25 * cos(angle) + 30;
y = 12 * sin(angle) + 12;
gotoxy(x, y);
printf(".");
}
gotoxy(30, 11); // 绘制表盘中心点
printf("*");
}
int main()
{
int i, x, y, minute;
double angle;
time_t now;
struct tm *tm_now;
draw_clock(); // 绘制时钟表盘
gotoxy(0, 15);
printf("倒计时开始");
minute = 1; // 设定倒计时时间为1分钟
now = time(NULL); // 获取当前时间
tm_now = localtime(&now);
angle = PI / 6 * (tm_now->tm_hour - 3) + PI / 360 * tm_now->tm_min; // 计算当前时针位置
x = 16 * cos(angle) + 30;
y = 8 * sin(angle) + 12;
gotoxy(x, y);
printf("*");
angle = PI / 30 * (tm_now->tm_min - 15); // 计算当前分针位置
x = 22 * cos(angle) + 30;
y = 11 * sin(angle) + 12;
gotoxy(x, y);
printf("*");
angle = PI / 30 * (tm_now->tm_sec - 15); // 计算当前秒针位置
x = 24 * cos(angle) + 30;
y = 11 * sin(angle) + 12;
gotoxy(x, y);
printf("|");
Sleep(1000); // 延时1秒
while (minute > 0) // 倒计时循环
{
now = time(NULL);
tm_now = localtime(&now);
angle = PI / 6 * (tm_now->tm_hour - 3) + PI / 360 * tm_now->tm_min;
x = 16 * cos(angle) + 30;
y = 8 * sin(angle) + 12;
gotoxy(x, y);
printf("*");
angle = PI / 30 * (tm_now->tm_min - 15) + PI / 1800; // 分针每秒钟走6度(1/60),即0.1度(1/600)
x = 22 * cos(angle) + 30;
y = 11 * sin(angle) + 12;
gotoxy(x, y);
printf("*");
angle = PI / 30 * (tm_now->tm_sec - 15) + PI / 30; // 秒针每秒钟走6度(1/10),即6度
x = 24 * cos(angle) + 30;
y = 11 * sin(angle) + 12;
gotoxy(x, y);
printf("|");
gotoxy(0, 15); // 清除上一个倒计时数字
printf(" ");
gotoxy(0, 15); // 显示当前倒计时数字
printf("倒计时%d分钟", minute);
Sleep(1000); // 延时1秒
if (tm_now->tm_sec == 0) // 每分钟更新一次倒计时数字
{
minute--;
}
}
gotoxy(0, 15); // 清除倒计时数字
printf(" ");
return 0;
}
```
需要注意的是,该代码在 Windows 环境下编译运行。如果在 Linux 环境下运行,需要将 Windows API 函数 `gotoxy` 和 `Sleep` 替换为相应的 Linux API 函数。
阅读全文