| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1347 人关注过本帖
标题:C语言动画地呈现满天星
只看楼主 加入收藏
楠晨
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2022-6-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
C语言动画地呈现满天星
C语言动画地呈现满天星 要求是C语言的不是是JAVA和C++的
搜索更多相关主题的帖子: 要求 动画 C语言 呈现 C++ 
2022-06-11 18:10
追梦人zmrghy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:406
专家分:190
注 册:2021-4-9
收藏
得分:7 
看过这个实例,EasyX库
纯C语言,
我还用EasyX库写过中国象棋。。。

[此贴子已经被作者于2022-6-12 20:52编辑过]

2022-06-12 20:47
不会游泳的虾
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:27
帖 子:109
专家分:679
注 册:2021-7-1
收藏
得分:7 
参考一段代码,供借鉴:
程序代码:
#include<time.h>
#include <Graphics.h>//图形库头文件
#pragma comment(lib,"winmm.lib")
#define MAXStar 3000 //星星
#define MAXMETEOR 200 //流星
IMAGE img1, img2, img3, img4;

void initStar(int i);//也调用在了initData()里需要做申明
void initMeteor(int i);//也调用在了initData()里需要做申明
//星星 做个申明
struct STAR
{
    int x, y;
    int v;
    int color;
}star[MAXStar];
//流星 做个申明
struct STAR0
{
    int x, y;
    int v;
    int style;//图片样式
}meteor[MAXMETEOR];
//制造数据
void  initData()
{
    //初始化数据
    loadimage(&img1, "1.jpg", 40, 40);
    loadimage(&img2, "2.jpg", 40, 40);
    loadimage(&img3, "3.jpg", 40, 40);
    loadimage(&img4, "4.jpg", 40, 40);
    //初始化星星
    int i;
    for (i = 0; i < MAXStar; i++)
    {
        initStar(i);
        star[i].x = rand() % 800;
    }
    //初始化流星
    for (i = 0; i < MAXMETEOR; i++)
    {
        initMeteor(i);
        meteor[i].x = rand() % 1000;
    }
}
//初始化星星
void initStar(int i)
{
    star[i].x = rand() % 1000;
    star[i].y = rand() % 1000;
    star[i].v = rand() % 10;
    star[i].color = RGB(star[i].v * 51, star[i].v * 51, star[i].v * 51);//255/5=51;
}
//初始化流星
void initMeteor(int i)
{
    meteor[i].x = rand() % 2000 - 10000;
    meteor[i].y = -200;
    do
    {
        meteor[i].v = rand() % 30 + 1;
    } while (meteor[i].v < 3);//避免出现速度过慢的
    meteor[i].style = rand() % 4 + 1;//1-4
}
//移动星星
void moveStar(int i)
{
    putpixel(star[i].x, star[i].y, 0);
    star[i].x += star[i].v;
    if (star[i].x > 1000)
        initStar(i);
    putpixel(star[i].x, star[i].y, star[i].color);
}
//移动流星
void moveMeteor()
{
    for (int i = 0; i < MAXMETEOR; i++)
    {
        meteor[i].x += meteor[i].v * 0.5;//初始化一个水平方形打的速度
        meteor[i].y += meteor[i].v * 1;//初始化方向加快一点速度  也可以不用 * 后面的数值    
    }
}
//画流星
void drawMeteor()
{
    for (int i = 0; i < MAXMETEOR; i++)
    {
        switch (meteor[i].style)
        {
        case 1:
            putimage(meteor[i].x, meteor[i].y, &img1, SRCPAINT);
            break;
        case 2:
            putimage(meteor[i].x, meteor[i].y, &img2, SRCPAINT);
            break;
        case 3:
            putimage(meteor[i].x, meteor[i].y, &img3, SRCPAINT);
            break;
        case 4:
            putimage(meteor[i].x, meteor[i].y, &img4, SRCPAINT);
            break;
        }
    }
}

int main()
{
    srand((unsigned int)time(NULL));
    initgraph(1000, 700);
    initData();
    mciSendString("open 123.mp3 ", 0, 0, 0);//背景音乐
    mciSendString("play 123.mp3 repeat", 0, 0, 0);

    while (1)
    {

        cleardevice();
        for (int i = 0; i < MAXStar; i++)
        {
            moveStar(i);
        }
        moveMeteor();
        drawMeteor();
        Sleep(100);

    }
    closegraph();
    return 0;
}


[此贴子已经被作者于2022-6-13 09:28编辑过]

2022-06-13 09:26
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1509
专家分:9241
注 册:2010-3-16
收藏
得分:7 
程序代码:
刚好手里有个星星代码。使用easyx

#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);
}

// 主函数
int 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);
        setbkmode(TRANSPARENT);
        RECT r = {0, 0, 639, 479};
        
        Sleep(20);
    }

    closegraph(); // 关闭绘图窗口
}
2022-06-13 09:55
快速回复:C语言动画地呈现满天星
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019329 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved