请选择 进入手机版 | 继续访问电脑版

【2021跨年】最浪漫的烟花程序,送给新的一年的自己!(源码)

[复制链接]
小浣熊 发表于 2021-1-2 11:46:15 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
祝愿各人,在新的一年内里也要更加好哦!
以下就是我们的新年烟花步调源码了!各人一起来学习吧~

源码分享:
#include
#include
#include
#include
#include //自己安装了才有
#include
#pragma comment(lib,"winmm.lib")//多媒体设备接口库文件
#define PI 3.1415
#define NUM 13 //烟花弹数量
#define WIDTH 960
#define HEIGHT 640
/*
开发情况:vs2019+easyx
*/
struct Fire
{
int x, y;
int cen_x, cen_y; //中心点坐标
int r; //当前绽放半径
int max_r; //最大绽放半径
int width, height;
DWORD pixel[240][240]; //图片像素数组
bool isShow; //烟花是否准备好了
bool isDraw; //是否绘制烟花
}fire[NUM];
struct Jet  //烟花弹
{
int x, y; //坐标
int hx, hy; //最高点的坐标
bool isLaunch; //烟花弹是否在发射中
IMAGE img[2];
byte n : 1; //位段  0 1 0 1 0 1 0 1 0 1
}jet[NUM];
void welcome()
{
mciSendString(L"open ./res/小幸运.mp3", 0, 0, 0);
mciSendString(L"play ./res/小幸运.mp3", 0, 0, 0);
for (int i = 0; i < 50; i++)
{
//清除屏幕
cleardevice();
int x = 500 + 180 * sin(2 * PI / 60 * i);
int y = 200 + 180 * cos(2 * PI / 60 * i);
//设置字体样式
settextstyle(i, 0, L"楷体");
settextcolor(RGB(0, 202, 0));
setbkmode(TRANSPARENT);
outtextxy(x, y, L"浪漫表明步调");
Sleep(20);
}
_getch();//按任意键继续
cleardevice();
settextstyle(25, 0, L"楷体");
outtextxy(350, 100, L"亲爱的XXX");
outtextxy(350, 150, L"自从第一天望见你");
outtextxy(350, 200, L"我的心就不能自制");
outtextxy(350, 250, L"不管天上地下都想望见你");
outtextxy(350, 300, L"...");
outtextxy(350, 350, L"...");
outtextxy(450, 400, L"--最喜欢你的我");
}
void InitData(int i);
void loadImg()
{
//初始化绽放效果
IMAGE bloomImg,tImg;
loadimage(&bloomImg, L"./res/flower.jpg", 3120, 240);
for (int i = 0; i < NUM; i++)
{
InitData(i);
SetWorkingImage(&bloomImg);
getimage(&tImg, i * 240, 0, 240, 240);
SetWorkingImage(&tImg);
for (int a = 0; a < 240; a++)
{
for (int  b = 0; b < 240; b++)
{
fire.pixel[a] = getpixel(a, b);
}
}
}
//初始化烟花弹
IMAGE jetImg;
loadimage(&jetImg, L"./res/launch.jpg", 200, 50);
SetWorkingImage(&jetImg);
for (int i = 0; i < NUM; i++)
{
int n = rand() % 5;
getimage(&jet.img[0], n*20, 0, 20, 50);
getimage(&jet.img[1], n*20 + 100, 0, 20, 50);
jet.isLaunch = false;
}
SetWorkingImage();
}
void InitData(int i)
{
fire.cen_x = 120;
fire.cen_y = 120;
fire.max_r = 120;
fire.r = 0;
fire.width = 240;
fire.height = 240;
fire.isDraw = false;
fire.isShow = false;
}
//产生烟花弹
void createJet()
{
int i = rand() % NUM;//[0~13)
if (jet.isLaunch == false)
{
jet.x = rand() % (WIDTH-20);
jet.y = rand() % 100 + HEIGHT;
jet.hx = jet.x;
jet.hy = rand() % (HEIGHT / 3 * 2);
jet.isLaunch = true;
}
}
//发射烟花弹
void launch()
{
for (int i = 0; i < NUM; i++)
{
if (jet.isLaunch)
{
putimage(jet.x, jet.y, &jet.img[jet.n],SRCINVERT);
//判定是否到达最高点了
if (jet.y > jet.hy)
{
jet.y -= 5;
jet.n++;
}
putimage(jet.x, jet.y, &jet.img[jet.n], SRCINVERT);
if (jet.y = fire.max_r)
{
InitData(i);
}
}
if (fire.isDraw)
{
//求当前半径下,圆上的每个点对于的弧度
for (double a = 0; a  0 && img_x < fire.width && img_y>0 && img_y < fire.height)
{
//针对现在的绽放点,对应的屏幕坐标
int win_x=  fire.x + fire.r * cos(a);
int win_y = fire.y + fire.r * sin(a);
if (win_x > 0 && win_x < WIDTH && win_y>0 && win_y < WIDTH)
{
pMem[win_y * WIDTH + win_x] = BGR(fire.pixel[img_x][img_y]);
}
}
}
}
}
}
int main()
{
//创建窗口
initgraph(960, 640);
//设置随机数种子
srand((unsigned)time(NULL)+clock());
welcome();
loadImg();
DWORD* pMem = GetImageBuffer(); //获取窗口的内存指针
while (1)
{
for (int  i = 0; i < WIDTH; i++)
{
for (int k = 0; k < 4; k++)
{
int x = rand() % WIDTH;
int y = rand() % HEIGHT;
if (y < HEIGHT)
{
pMem[y * WIDTH + x] = BLACK;
}
}
}
createJet();
launch();
bloom(pMem);
Sleep(10);
}
closegraph();
return 0;
}
以上就是本日的全部分享,happy new year!
别的如果你想更好的提升你的编程本领,学好C语言C++编程!弯道超车,快人一步!笔者这里大概可以帮到你~
C语言C++编程学习互换圈子,QQ群1090842465点击进入】微信公众号:C语言编程学习基地
分享(源码、项目实战视频、项目条记,根本入门教程)
欢迎转行和学习编程的同伴,使用更多的资料学习发展比自己琢磨更快哦!
编程学习书籍分享:

编程学习视频分享:

 

来源:https://blog.csdn.net/qq_42366672/article/details/112056291
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )