这个程序可以在控制台中模拟星空闪烁的效果,每次循环都会随机生成星星的位置并绘制,然后短暂停顿,给人以星空动态变化的感觉
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
// 函数声明,用于获取控制台窗口的宽度
int getConsoleWidth();
// 函数声明,用于获取控制台窗口的高度
int getConsoleHeight();
// 绘制星星
void drawStar(int x, int y) {
COORD coord = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
printf("*");
}
// 定义获取控制台窗口宽度的函数
int getConsoleWidth() {
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
return csbi.dwSize.X;
}
// 定义获取控制台窗口高度的函数
int getConsoleHeight() {
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
return csbi.dwSize.Y;
}
int main() {
srand((unsigned int)time(NULL));
int interval = 500; // 星星闪烁间隔,单位毫秒,初始值为500
int isPaused = 0; // 标记程序是否暂停,0表示运行,1表示暂停
char input; // 用于接收用户输入的字符
while (1) {
if (!isPaused) {
system("cls");
// 使用函数获取控制台窗口高度,用于限制星星纵坐标范围
int height = getConsoleHeight();
// 使用函数获取控制台窗口宽度,用于限制星星横坐标范围
int width = getConsoleWidth();
for (int i = 0; i < 50; i++) {
int x = rand() % width;
int y = rand() % height;
drawStar(x, y);
}
Sleep(interval);
}
// 检查是否有键盘输入
if (_kbhit()) {
input = _getch();
if (input == 'p' || input == 'P') {
isPaused =!isPaused; // 切换暂停状态
if (isPaused) {
system("cls");
printf("程序已暂停,按 P 键继续,按 + 或 - 键调整闪烁间隔,按 Q 键退出\n");
}
} else if (input == '+' && interval > 100) {
interval -= 100; // 减少闪烁间隔,加快闪烁速度
printf("闪烁间隔调整为 %d 毫秒\n", interval);
} else if (input == '-' && interval < 1000) {
interval += 100; // 增加闪烁间隔,减慢闪烁速度
printf("闪烁间隔调整为 %d 毫秒\n");
} else if (input == 'q' || input == 'Q') {
break; // 退出程序
}
}
}
return 0;
}