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(); // 关闭绘图窗口 }