Y_Chih 2021-06-29 09:02 采纳率: 0%
浏览 438

用C语言 动画地呈现满天星

动画地呈现满天星

题目详解:

绘制一个充满星星的夜空。星空绘制程序中,可使用结构体数组实现对星星数据的保存。星星可用画点函数画出来白色的点,并使用随机函数随机产生星星,对结构体中保存的星星进行移动。

#include <graphics.h>
#include <time.h>
#include <conio.h>
 
#define MAXSTAR 200    // 星星总数
 
struct STAR
{
    double x;
    int y;
    double step;
    int color;
};
 
STAR star[MAXSTAR];
 
// 初始化星星
void InitStar(int i)
{
    star[i].x = 0;
    star[i].y = rand() % 480;
    star[i].step = (rand() % 5000) / 1000.0 + 1;
    star[i].color = (int)(star[i].step * 255 / 6.0 + 0.5);    // 速度越快,颜色越亮
    star[i].color = RGB(star[i].color, star[i].color, star[i].color);
}
 
// 移动星星
void MoveStar(int i)
{
    // 擦掉原来的星星
    putpixel((int)star[i].x, star[i].y, 0);
 
    // 计算新位置
    star[i].x += star[i].step;
    if (star[i].x > 640)    InitStar(i);
 
    // 画新星星
    putpixel((int)star[i].x, star[i].y, star[i].color);
}
 
// 主函数
void main()
{
    srand((unsigned)time(NULL)); // 随机种子
    initgraph(640, 480);    // 打开图形窗口
 
    // 初始化所有星星
    for(int i=0; i<MAXSTAR; i++)
    {
        InitStar(i);
        star[i].x = rand() % 640;
    }
 
    // 绘制星空,按任意键退出
    while(!kbhit())
    {
        for(int i=0; i<MAXSTAR; i++)
            MoveStar(i);
        Sleep(20);
    }
 
    closegraph();    // 关闭图形窗口
}

用过了这个代码,但要求要带printf的,我实在是懵了,寻求大神帮助!!!

  • 写回答

1条回答 默认 最新

  • 山外有山a 2024-02-26 09:50
    关注

    你可以很容易地在这个代码的基础上添加printf语句来输出一些信息。比如在InitStar函数中,你可以添加printf语句来显示每颗星星的初始位置和速度,或者在MoveStar函数中加入printf来显示每颗星星移动后的位置。下面我举一个例子:

    在InitStar函数中添加printf语句:

    void InitStar(int i)
    {
        star[i].x = 0;
        star[i].y = rand() % 480;
        star[i].step = (rand() % 5000) / 1000.0 + 1;
        star[i].color = (int)(star[i].step * 255 / 6.0 + 0.5);    // 速度越快,颜色越亮
        star[i].color = RGB(star[i].color, star[i].color, star[i].color);
        
        printf("Star %d initialized at position (%.2lf, %d) with speed %.2lf\n", i, star[i].x, star[i].y, star[i].step);
    }
    
    
    

    或者在MoveStar函数中加入printf语句:

    void MoveStar(int i)
    {
        // 擦掉原来的星星
        putpixel((int)star[i].x, star[i].y, 0);
     
        // 计算新位置
        star[i].x += star[i].step;
        if (star[i].x > 640)    InitStar(i);
     
        // 画新星星
        putpixel((int)star[i].x, star[i].y, star[i].color);
        
        printf("Star %d moved to position (%.2lf, %d)\n", i, star[i].x, star[i].y);
    }
    
    
    
    
    void MoveStar(int i)
    {
        // 擦掉原来的星星
        putpixel((int)star[i].x, star[i].y, 0);
     
        // 计算新位置
        star[i].x += star[i].step;
        if (star[i].x > 640)    InitStar(i);
     
        // 画新星星
        putpixel((int)star[i].x, star[i].y, star[i].color);
        
        printf("Star %d moved to position (%.2lf, %d)\n", i, star[i].x, star[i].y);
    }
    

    通过这样的方式,你可以在程序运行时输出相应信息,帮助理解每颗星星的初始化和运动过程。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算