C语言动画地呈现满天星
C语言动画地呈现满天星 要求是C语言的不是是JAVA和C++的
纯C语言,
我还用EasyX库写过中国象棋。。。
[此贴子已经被作者于2022-6-12 20:52编辑过]
程序代码:#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编辑过]
程序代码:
刚好手里有个星星代码。使用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(); // 关闭绘图窗口
}