C语言/C++常见习题问答集锦(七十九)唯美系列之短暂而永恒
程序之美
星空下的夜,是最让我回忆的夜,静静地想你的夜;星空下的夜,流星划过,是我那相思的泪;星空下的夜,曾多少次想过与你一起看流星雨,数着那仿佛在眨眼的星星,可以在流星划过的瞬间,许下爱的承诺!血仿佛流光了,也仿佛凝固了,只留下一道深深的痕迹—伤痕,如那划过的流星!
当然,作为一名码农,什么不都的实践一下不,下面我们就用代码的方法来表达我们心中的流星雨—数字流星雨。
话不多说,先看运行结果:
代码示例:
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>//图形界面库
#include<conio.h>
#include<time.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm")
#define MAXSTAR 1000
#define MAXMETEOR 100
IMAGE img1, img2, img3;
//星星的属性
struct Star
{
int x, y;
int step;
int color;
}star[MAXSTAR];
//流星的属性
struct Meteor
{
int x, y;
int step;
int style;
}meteor[MAXMETEOR];
//初始化星星
void initStar(int i)
{
star[i].x = rand() % 1000; //[0,999]
star[i].y = rand() % 600;
star[i].step = rand() % 6 + 3; //[0,5]
star[i].color = RGB(rand() % 255, rand() % 255, rand() % 255);
}
//画星星和移动星星
void moveStar(int i)
{
//画像素点
putpixel(star[i].x, star[i].y, star[i].color);
//移动处理
star[i].x += star[i].step;
//如果移动到了窗口外面
if (star[i].x > 1920)
{
putpixel(star[i].x, star[i].y, star[i].color);
initStar(i);
}
}
//初始化流星
void initMeteor(int i)
{
meteor[i].x = rand() % 2000 - 1000;//[-1000,999]
meteor[i].y = -600;//[0,599]-600-->[-600,-1]
meteor[i].step = rand() % 30 + 2;
meteor[i].style = rand() % 3; //[0,2]-->0,1,2
}
//初始化数据
void initDate(int i)
{
//加载图片
loadimage(&img1, "./s1.png", 30, 30);
loadimage(&img2, "./s2.png", 40, 40);
loadimage(&img3, "./s1.png", 50, 50);
for (i = 0; i < MAXSTAR; i++)
{
initStar(i);
}
for (i = 0; i < MAXMETEOR; i++)
{
initMeteor(i);
}
}
//画流星:贴图
void drawMeteor(int i)
{
for (i = 0; i < MAXMETEOR; i++)
{
switch (meteor[i].style)
{
case 0:
putimage(meteor[i].x, meteor[i].y, &img1, SRCPAINT);
break;
case 1:
putimage(meteor[i].x, meteor[i].y, &img2, SRCPAINT);
break;
case 2:
putimage(meteor[i].x, meteor[i].y, &img3, SRCPAINT);
break;
}
}
}
//移动流星
void moveMeteor(int i)
{
for (i = 0; i < MAXMETEOR; i++)
{
meteor[i].x += meteor[i].step;
meteor[i].y += meteor[i].step;
//如果流星跑到窗口外面
if (meteor[i].x > 1920 || meteor[i].y > 1080)
{
initMeteor(i);
}
}
}
//文字输出
void text()
{
settextcolor(RGB(rand() % 255, rand() % 255, rand() % 255));
settextstyle(30, 0, "楷体");
const char* text[50] = { "X", "X", "X", "我", "喜", "欢", "你", "做", "我", "女", "朋", "友", "吧", "!", };
int x = 1920, y = 1080;
for (int i = 0; i < 14; i++)
{
if (i < 7)
outtextxy(x, y + i * 50, text[i]);
else
outtextxy(x + 100, y + (i - 7) * 50, text[i]);
}
}
int main()
{
initgraph(1920, 1080);
mciSendString("open 2.mp3", 0, 0, 0);
mciSendString("play 2.mp3 repeat", 0, 0, 0);
srand((unsigned int)time(NULL));//随机函数种子
setbkmode(TRANSPARENT);
int i = 0;
initDate(i);
while (1)
{
cleardevice();
for (i = 0; i < MAXSTAR; i++)
{
moveStar(i);
}
drawMeteor(i);
moveMeteor(i);
text();
Sleep(100);
}
_getch();
closegraph();
return 0;
}
所需素材:
好了,今天就说这么多了,希望小伙伴们能从这篇文章中学到东西,也真心希望能够帮助正在苦学C语言的小伙伴们,你们的成长是我最大的幸福。很感谢您能够在百忙之中浏览我的文章。