百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

C语言开发《浪漫流星雨》表白程序,源码来了

itomcoil 2025-04-29 01:24 16 浏览

浪漫表白效果:

开发环境:Visual Studio 2019 + EasyX图形库插件即可

源码展示:

#include<stdio.h>
 
#include<math.h>
 
#include<time.h>
 
#include<conio.h>
 
#include<graphics.h> //自己安装了才有
 
#include<mmsystem.h>
 
#pragma comment(lib,"winmm.lib")//多媒体设备接口库文件
 
#define PI 3.1415
 
#define NUM 13 //烟花弹数量
 
#define WIDTH 960
 
#define HEIGHT 640
 
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"--爱你的XXX");
 
}
 
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[i].pixel[a][b] = 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[i].img[0], n*20, 0, 20, 50);
 
getimage(&jet[i].img[1], n*20 + 100, 0, 20, 50);
 
jet[i].isLaunch = false;
 
}
 
SetWorkingImage();
 
}
 
void InitData(int i)
 
{
 
fire[i].cen_x = 120;
 
fire[i].cen_y = 120;
 
fire[i].max_r = 120;
 
fire[i].r = 0;
 
fire[i].width = 240;
 
fire[i].height = 240;
 
fire[i].isDraw = false;
 
fire[i].isShow = false;
 
}
 
//产生烟花弹
 
void createJet()
 
{
 
int i = rand() % NUM;//[0~13)
 
if (jet[i].isLaunch == false)
 
{
 
jet[i].x = rand() % (WIDTH-20);
 
jet[i].y = rand() % 100 + HEIGHT;
 
jet[i].hx = jet[i].x;
 
jet[i].hy = rand() % (HEIGHT / 3 * 2);
 
jet[i].isLaunch = true;
 
}
 
}
 
//发射烟花弹
 
void launch()
 
{
 
for (int i = 0; i < NUM; i++)
 
{
 
if (jet[i].isLaunch)
 
{
 
putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n],SRCINVERT);
 
//判断是否达到最高点了
 
if (jet[i].y > jet[i].hy)
 
{
 
jet[i].y -= 5;
 
jet[i].n++;
 
}
 
putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n], SRCINVERT);
 
if (jet[i].y <= jet[i].hy)
 
{
 
jet[i].isLaunch = false;
 
//可以开始放烟花了
 
fire[i].x = jet[i].x;
 
fire[i].y = jet[i].y;
 
fire[i].isShow = true;
 
}
 
}
 
}
 
}
 
void bloom(DWORD *pMem)
 
{
 
for (int i = 0; i < NUM; i++)
 
{
 
if (fire[i].isShow)
 
{
 
if (fire[i].r < fire[i].max_r)
 
{
 
fire[i].r++;
 
fire[i].isDraw = true; //可以开始绘制烟花了
 
}
 
if (fire[i].r >= fire[i].max_r)
 
{
 
InitData(i);
 
}
 
}
 
if (fire[i].isDraw)
 
{
 
//求当前半径下,圆上的每个点对于的弧度
 
for (double a = 0; a <= 2 * PI; a += 0.01)
 
{
 
int img_x = fire[i].cen_x + fire[i].r * cos(a);//求出圆上的每个点的坐标
 
int img_y = fire[i].cen_y + fire[i].r * sin(a);
 
if (img_x > 0 && img_x < fire[i].width && img_y>0 && img_y < fire[i].height)
 
{
 
//针对现在的绽放点,对应的屏幕坐标
 
int win_x=  fire[i].x + fire[i].r * cos(a);
 
int win_y = fire[i].y + fire[i].r * sin(a);
 
if (win_x > 0 && win_x < WIDTH && win_y>0 && win_y < WIDTH)
 
{
 
pMem[win_y * WIDTH + win_x] = BGR(fire[i].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;
 
}

以上就是我们表白程序的源码了!最后祝大家都能和喜欢的人在一起哦~

我的C/C++编程学习基地,点击正在跳转「链接」即可加入,欢迎有问题的小伙伴一起进来学习交流嗷~

相关推荐

点过的网页会变色?没错,这玩意把你的浏览记录漏光了

提起隐私泄露这事儿,托尼其实早就麻了。。。平时网购、换手机号、注册各种账号之类的都会咔咔泄露,根本就防不住。但托尼真是没想到,浏览器里会有一个看起来完全人畜无害的功能,也在偷偷泄露我们的个人隐私,而且...

Axure教程:高保真数据可视化原型

本文将介绍如何制作Axure高保真数据可视化原型,供大家参考和学习。高保真数据可视化原型设计,称得上是Axure高阶水平。数据可视化在原型设计中是一个重要的分支,但是对于Axure使用者具有一定要求。...

Flutter web开发中禁用浏览器后退按钮

路由采用的go-router路由框架:finalrootNavigatorKey=GlobalKey<NavigatorState>();finalGoRouterrouter...

jQuery 控制属性和样式

标记的属性each()遍历元素:each(callback)方法主要用于对选择器进行遍历,它接受一个函数为参数,该函数接受一个参数,指代元素的序号。对于标记的属性而言,可以利用each()方法配合th...

微信小程序入门教程之二:页面样式

这个系列的上一篇教程,教大家写了一个最简单的Helloworld微信小程序。但是,那只是一个裸页面,并不好看。今天接着往下讲,如何为这个页面添加样式,使它看上去更美观,教大家写出实际可以使用的页...

如何在Windows11的任务栏中禁用和删除天气小部件图标?

微软该公司已在Windows11的任务栏中添加了一个天气小部件图标,作为小部件的入口点。这个功能与之前Win10上的新闻与资讯功能相同,但是有的用户不喜欢想要关闭,不知道如何操作,下面小编为大家带来...

CSS伪类选择器大全:提升网页交互与样式的神奇工具

CSS伪类选择器是前端开发中不可或缺的强大工具,它们允许我们根据元素的状态、位置或用户行为动态地应用样式。本文将全面介绍常用的伪类选择器,并通过代码示例展示其实际应用场景。一、基础交互伪类1.超链接...

7个Axure使用小技巧

编辑导读:对于Axure原型工具,很少有产品经过系统学习,一般都是直接上手,边摸索边学习,这直接导致很多快捷操作被忽视。笔者在日常工作中总结出以下小技巧,希望对各位有帮助。之前整理了2期Axure的...

JavaScript黑暗技巧:禁止浏览器点击“后退”按钮

浏览网页时,当从A页面点击跳转到B页面后,一般情况下,可以点击浏览器上的“后退”按钮返回A页面。如果进入B页面后,B页面想让访问者留下,禁止返回,是否可以实现呢?这简直是要控制浏览器的行为,虽然有些邪...

对齐PyTorch,一文详解OneFlow的DataLoader实现

撰文|赵露阳在最新的OneFlowv0.5.0版本中,我们增加了许多新特性,比如:新增动态图特性:OneFlow默认以动态图模式(eager)运行,与静态图模式(graph)相比,更容易搭建网...

Python计算机视觉编程 第一章 基本的图像操作和处理

以下是使用Python进行基本图像操作和处理的示例代码:使用PIL库加载图像:fromPILimportImageimage=Image.open("image.jpg"...

PyTorch 深度学习实战(31):可解释性AI与特征可视化

在上一篇文章中,我们探讨了模型压缩与量化部署技术。本文将深入可解释性AI与特征可视化领域,揭示深度学习模型的决策机制,帮助开发者理解和解释模型的内部工作原理。一、可解释性AI基础1.核心概念特征重要...

学习编程第177天 python编程 富文本框text控件的使用

今天学习的是刘金玉老师零基础Python教程第72期,主要内容是python编程富文本框text控件。一、知识点1.tag_config方法:利用某个别名作为标签,具体的对应标签的属性功能配置在后面参...

用Python讓電腦攝像頭實現掃二維碼

importsys#系統模組,用來存取命令列參數與系統功能importcv2#OpenCV,處理影像與相機操作importnumpyasnp#Numpy,用來處理數值與...

使用Transformer来做物体检测

作者:JacobBriones编译:ronghuaiyang导读这是一个Facebook的目标检测Transformer(DETR)的完整指南。介绍DEtectionTRansformer(D...