穿越时间的屏障,扭曲,联结,消逝,重回。流星带来的是什么?绝望,亦或是希望。守望同一片天空的那份期望,三年前的相遇,你说出了你的名字,在比我名字更久之前的你。三年后的我,因为失去了什么而感到失落。现在我终于知道了,不要再走散了吧。醒来后还能记起来吗?你的名字是什么?
今天就为大家带来浪漫流星雨表白程序教程
先看下效果(背景照片、字体、流星雨图案这些都可依据个人喜好更换哈)
怎么写呢,必不可少的图形库不能丢
#include
再加一个多媒体头文件
#include
设置背景图以及流星雨数量与图片
#define NUM 100 //流星雨数量
//背景图
IMAGE img_bk[2];
//流星图片
IMAGE img_meteor[2];
设置流星位置与速度
struct Meteor //流星
{
int x;
int y;
int speed; //速度
};
struct Meteor meteor[NUM];
背景音乐
mciSendString(_T("open ./images/浪漫空气.mp3 alias bgm"), NULL, 0, NULL);
字体样式
settextstyle(40, 0, _T("华文行楷"));
字体颜色
settextcolor(RGB(rand()%256, rand() % 256, rand() % 256));
背景图片
putimage(0, 0, img_bk);
主角登场,表白语句
outtextxy(450, 20, _T("德克萨斯,我喜欢你"));
outtextxy(200, 100, _T("爱意随风起,风止意难平。"));
outtextxy(200, 150, _T("我还是很喜欢你,像风吹过几万里"));
outtextxy(200, 200, _T("春风十里不如你,我喜欢你"));
outtextxy(200, 250, _T("曾经有份真挚的感情摆在我面前,我却没有珍惜"));
outtextxy(200, 300, _T("春风十里,不及你嫣然一笑。"));
outtextxy(200, 350, _T("天青等烟雨,而我在等你"));
outtextxy(200, 400, _T("因为我爱你,所以纵容你"));
outtextxy(200, 450, _T("情书是抄的,爱你是真的。"));
outtextxy(200, 500, _T("----------------------------爱你的拉普兰德"));
气氛组少不了的礼花
for (size_t i = 0; i < 10; i++)
{
settextcolor(RGB(rand() % 256, rand() % 256, rand() % 256));
outtextxy(rand()%1200, rand() % 800, _T("♥"));
outtextxy(rand() % 1200, rand() % 800, _T(""));
}
Sleep(1000);
一些细节
//初始化流星
void initMeteor(int i)
{
meteor[i].x = rand() % (1200*2) - 1200; //(0-1200,1200)
meteor[i].y = rand() %20 - 200; //(-78,-200)
meteor[i].speed = rand() % 15 + 1;
}
//绘制流星
void drawMeteor()
{
for (int i = 0; i < NUM; i++)
{
putimage(meteor[i].x, meteor[i].y, img_meteor + rand() % 2,SRCPAINT);
}
}
//移动流星
void moveMeteor()
{
//改变坐标就可以实现移动了,斜向x,y都要变化
for (int i = 0; i < NUM; i++)
{
meteor[i].x += meteor[i].speed;
meteor[i].y += meteor[i].speed;
if (meteor[i].y > getheight() || meteor[i].x>getwidth())
{
initMeteor(i);
}
}
}
主函数
int main()
{
//创建图形窗口
initgraph(1200, 800,EW_SHOWCONSOLE);
//加载图片
loadimage(img_bk, _T("./images/welcome.png"),1200,800);
loadimage(img_bk + 1, _T("./images/bk.png"),1200,800);
loadimage(img_meteor, _T("./images/1.jpg"), 50, 50);
loadimage(img_meteor+1, _T("./images/2.jpg"), 50, 50);
welcome();
for (size_t i = 0; i < NUM; i++)
{
initMeteor(i);
}
//防止闪屏,双缓冲
BeginBatchDraw(); //开启双缓冲绘图
while (true)
{
//控制画面的帧率 26帧 60
int begin = clock(); //获取程序运行时间(毫秒数)
putimage(0, 0, img_bk + 1);
drawMeteor();
moveMeteor();
//Sleep(50); //让程序休眠
FlushBatchDraw();//刷新
//获取程序总共的执行时间
int timeRemaining = clock() - begin;
//计算每帧需要的时间
int timeFrame = 1000.0 / 60;
//获取程序执行时间有没有超过,每帧执行的最大时间
int delay = timeFrame - timeRemaining;
if (delay > 0)
{
printf("%d\n", delay);
Sleep(delay); //动态变化
}
}
EndBatchDraw();
有个地方忘说了,记得设置透明背景模式
setbkmode(TRANSPARENT);
再完善一下整体格式与代码完整度就大功告成啦。
获取游戏源码及素材可以进来我的学习圈【806041599】,进来一起学习交流,有一些资料可以帮助大家更好的学习,在学习C语言的过程中遇到任何的问题,都可以发出来一起讨论,每天晚上20:00都会有直播给大家分享C/C++编程学习知识和路线方法,会不定期更新最新的教程和学习方法,大家都是学习C/C++的,或是转行,或是大学生,还有工作中想提升自己能力的前端党,如果你是正在学习C/C++的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实。