打印
[技术讨论]

高考,望天空繁星,慰籍我干枯的心灵,写一个动态繁星程序

[复制链接]
128|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
丙丁先生|  楼主 | 2025-6-7 22:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在C语言中,可以通过控制台输出来模拟“漫天繁星”的效果。虽然C语言本身没有直接的图形绘制功能,但可以通过字符和颜色来实现简单的视觉效果。以下是一个简单的示例程序,使用ANSI转义序列来设置背景颜色为蓝黑色,并随机生成“繁星”效果。

### 程序代码
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h> // 用于sleep函数

#define WIDTH 80  // 控制台宽度
#define HEIGHT 25 // 控制台高度
#define STARS 100 // 星星的数量

// 设置背景颜色为蓝黑色
void set_background_color() {
    printf("\033[40m"); // ANSI转义序列,设置背景颜色为蓝黑色
}

// 清屏函数
void clear_screen() {
    printf("\033[2J"); // ANSI转义序列,清屏
    printf("\033[H");  // ANSI转义序列,将光标移动到左上角
}

// 随机生成星星
void generate_stars() {
    for (int i = 0; i < STARS; i++) {
        int x = rand() % WIDTH;  // 随机生成x坐标
        int y = rand() % HEIGHT; // 随机生成y坐标
        printf("\033[%d;%dH*", y + 1, x + 1); // 在(x, y)位置打印星星
    }
}

int main() {
    // 初始化随机数种子
    srand((unsigned int)time(NULL));

    // 设置背景颜色
    set_background_color();

    // 主循环
    while (1) {
        // 清屏
        clear_screen();

        // 生成星星
        generate_stars();

        // 暂停一段时间
        usleep(500000); // 500毫秒
    }

    return 0;
}
```

### 程序说明
1. **ANSI转义序列**:
   - `\033[40m`:设置背景颜色为蓝黑色。
   - `\033[2J`:清屏。
   - `\033[H`:将光标移动到左上角。
   - `\033[%d;%dH`:将光标移动到指定的行列位置。

2. **随机生成星星**:
   - 使用`rand()`函数生成随机坐标。
   - 在随机位置打印`*`字符表示星星。

3. **循环显示**:
   - 程序在主循环中不断清屏并重新生成星星,模拟动态效果。

### 编译和运行
1. 将代码保存为`stars.c`。
2. 使用以下命令编译程序:
   ```bash
   gcc -o stars stars.c
   ```
3. 运行程序:
   ```bash
   ./stars
   ```

注意事项该程序在支持ANSI转义序列的终端中运行效果最佳(如Linux终端、Windows的Windows Terminal等)。
如果在Windows的CMD中运行,可能需要额外配置以支持ANSI转义序列。
程序中使用了`usleep`函数,它在Windows中可能不可用。如果在Windows上运行,可以使用`Sleep`函数(需要包含`windows.h`头文件)。

希望这个程序能给你带来一些有趣的视觉效果!

使用特权

评论回复

相关帖子

沙发
丙丁先生|  楼主 | 2025-6-7 22:47 | 只看该作者
[技术讨论]  高考,望天空繁星,慰籍我干枯的心灵,写一个动态繁星程序   https://bbs.21ic.com/icview-3459754-1-1.html

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1056

主题

3952

帖子

6

粉丝