原标题:程序员的表白神器代码

这篇代码是程序员的福利,拜拜的一个神奇,各位,拿去,不谢!表白成功啦记得请小编吃饭就是!

烟花源代码

#include

#include

#include

#include

#include

#include

#pragma comment ( lib, "Winmm.lib" )

/***** 宏定义区 ******/

#define NUM 13 // 烟花种类数量宏定义

#define PI 3.1415926548

/***** 结构定义区 **********/

// 烟花结构

struct FIRE

{

int r; // 当前爆炸半径

int max_r; // 爆炸中心距离边缘最大半径

int x, y; // 爆炸中心在窗口的坐标

int cen_x, cen_y; // 爆炸中心相对图片左上角的坐标

int width, height; // 图片的宽高

int xy[240][240]; // 储存图片像素点

bool show; // 是否绽放

bool draw; // 开始输出像素点

DWORD t1, t2, dt; // 绽放速度

}Fire[NUM];

// 烟花弹结构

struct JET

{

int x, y; // 喷射点坐标

int hx, hy; // 最高点坐标------将赋值给 FIRE 里面的 x, y

int height; // 烟花高度

bool shoot; // 是否可以发射

DWORD t1, t2, dt; // 发射速度

IMAGE img[2]; // 储存花弹一亮一暗图片

byte n : 1; // 图片下标

}Jet[NUM];

/**** 函数申明区 ****/

void welcome();

void Init(int); // 初始化烟花

void Load(); // 加载烟花图片

void Shoot(); // 发射烟花

void Chose(DWORD&); // 筛选烟花

void Style(DWORD&); // 发射样式

void Show(DWORD*); // 绽放烟花

// 主函数

void main()

{

initgraph(1200, 800);

srand(time(0));

// 播放背景音乐

mciSendString("open ./fire/bk.mp3 alias bk", 0, 0, 0);

mciSendString("play bk repeat", 0, 0, 0);

welcome();

DWORD t1 = timeGetTime(); // 筛选烟花计时

DWORD st1 = timeGetTime(); // 播放花样计时

DWORD* pMem = GetImageBuffer(); // 获取窗口显存指针

for (int i = 0; i < NUM; i++) // 初始化烟花

{

Init(i);

}

Load(); // 将烟花图片信息加载进相应结构中

BeginBatchDraw(); // 开始批量绘图

while (!kbhit())

{

Sleep(10);

// 随机选择 4000 个像素点擦除

for (int clr = 0; clr < 1000; clr++)

{

for (int j = 0; j < 2; j++)

{

int px1 = rand() % 1200;

int py1 = rand() % 800;

if (py1 < 799) // 防止越界

pMem[py1 * 1200 + px1] = pMem[py1 * 1200 + px1 + 1] = BLACK; // 对显存赋值擦出像素点

}

}

Chose(t1); // 筛选烟花

Shoot(); // 发射烟花

Show(pMem); // 绽放烟花

Style(st1); // 花样发射

FlushBatchDraw(); // 显示前面的所有绘图操作

}

}

void welcome()

{

//setfillstyle(0);

setcolor(YELLOW);

for (int i = 0; i < 50; i++)

{

int x = 600 + int(180 * sin(PI * 2 * i / 60));

int y = 200 + int(180 * cos(PI * 2 * i / 60));

cleardevice();

settextstyle(i, 0, "楷体");

outtextxy(x, y, "烟花");

outtextxy(x, y-50, "制作人:小魔王");

outtextxy(x - 130, y + 100, "用代码将梦想照进现实!");

Sleep(25);

}

getchar();

cleardevice();

settextstyle(25, 0, "楷体");

outtextxy(400, 150, "什么都没有总比现在的好");

outtextxy(400, 200, "有一点点希望");

outtextxy(400, 250, "就得有多少的期望?");

outtextxy(400, 300, "又他妈的换来多少失望?");

outtextxy(400, 350, "烟花再美又怎么样?");

outtextxy(400, 400, "女孩自己要懂得自己挣钱");

outtextxy(400, 450, "会开车会打扮");

outtextxy(400, 500, "车子有油");

outtextxy(400, 550, "手机有电");

outtextxy(400, 600, "钱包有钱");

outtextxy(400, 650, "再光鲜亮丽的副驾驶也不及自己握方向盘");

getchar();

}

// 初始化烟花参数

void Init(int i)

{

// 分别为:烟花中心到图片边缘的最远距离、烟花中心到图片左上角的距离 (x、y) 两个分量

int r[13] = { 120, 120, 155, 123, 130, 147, 138, 138, 130, 135, 140, 132, 155 };

int x[13] = { 120, 120, 110, 117, 110, 93, 102, 102, 110, 105, 100, 108, 110 };

int y[13] = { 120, 120, 85, 118, 120, 103, 105, 110, 110, 120, 120, 104, 85 };

/**** 初始化烟花 *****/

Fire[i].x = 0; // 烟花中心坐标

Fire[i].y = 0;

Fire[i].width = 240; // 图片宽

Fire[i].height = 240; // 图片高

Fire[i].max_r = r[i]; // 最大半径

Fire[i].cen_x = x[i]; // 中心距左上角距离

Fire[i].cen_y = y[i];

Fire[i].show = false; // 是否绽放

Fire[i].dt = 5; // 绽放时间间隔

Fire[i].t1 = timeGetTime();

Fire[i].r = 0; // 从 0 开始绽放

/**** 初始化烟花弹 *****/

Jet[i].x = -240; // 烟花弹左上角坐标

Jet[i].y = -240;

Jet[i].hx = -240; // 烟花弹发射最高点坐标

Jet[i].hy = -240;

Jet[i].height = 0; // 发射高度

Jet[i].t1 = timeGetTime();

Jet[i].dt = rand() % 10; // 发射速度时间间隔

Jet[i].n = 0; // 烟花弹闪烁图片下标

Jet[i].shoot = false; // 是否发射

}

// 加载图片

void Load()

{

/**** 储存烟花的像素点颜色 ****/

IMAGE fm, gm;

loadimage(&fm, "./fire/flower.jpg", 3120, 240);

for (int i = 0; i < 13; i++)

{

SetWorkingImage(&fm);

getimage(&gm, i * 240, 0, 240, 240);

SetWorkingImage(&gm);

for (int a = 0; a < 240; a++)

for (int b = 0; b < 240; b++)

Fire[i].xy[a][b] = getpixel(a, b);

}

/**** 加载烟花弹 ************/

IMAGE sm;

loadimage(&sm, "./fire/shoot.jpg", 200, 50);

for (int i = 0; i < 13; i++)

{

SetWorkingImage(&sm);

int n = rand() % 5;

getimage(&Jet[i].img[0], n * 20, 0, 20, 50); // 暗

getimage(&Jet[i].img[1], (n + 5) * 20, 0, 20, 50); // 亮

}

SetWorkingImage(); // 设置回绘图窗口

}

// 在一定范围内筛选可发射的烟花,并初始化发射参数,输出烟花弹到屏幕,播放声音

void Chose(DWORD& t1)

{

DWORD t2 = timeGetTime();

if (t2 - t1 > 100)

{

int n = rand() % 20;

if (n < 13 && Jet[n].shoot == false && Fire[n].show == false)

{

/**** 重置烟花弹,预备发射 *****/

Jet[n].x = rand() % 1200;

Jet[n].y = rand() % 100 + 600;

Jet[n].hx = Jet[n].x;

Jet[n].hy = rand() % 400;

Jet[n].height = Jet[n].y - Jet[n].hy;

Jet[n].shoot = true;

putimage(Jet[n].x, Jet[n].y, &Jet[n].img[Jet[n].n], SRCINVERT);

/**** 播放每个烟花弹的声音 *****/

char c1[50], c2[30], c3[30];

sprintf(c1, "open ./fire/shoot.mp3 alias s%d", n);

sprintf(c2, "play s%d", n);

sprintf(c3, "close n%d", n);

mciSendString(c3, 0, 0, 0);

mciSendString(c1, 0, 0, 0);

mciSendString(c2, 0, 0, 0);

}

t1 = t2;

}

}

// 扫描烟花弹并发射

void Shoot()

{

for (int i = 0; i < 13; i++)

{

Jet[i].t2 = timeGetTime();

if (Jet[i].t2 - Jet[i].t1 > Jet[i].dt && Jet[i].shoot == true)

{

/**** 烟花弹的上升 *****/

putimage(Jet[i].x, Jet[i].y, &Jet[i].img[Jet[i].n], SRCINVERT);

if (Jet[i].y > Jet[i].hy)

{

Jet[i].n++;

Jet[i].y -= 5;

}

putimage(Jet[i].x, Jet[i].y, &Jet[i].img[Jet[i].n], SRCINVERT);

/**** 上升到高度的 3 / 4,减速 *****/

if ((Jet[i].y - Jet[i].hy) * 4 < Jet[i].height)

Jet[i].dt = rand() % 4 + 10;

/**** 上升到最大高度 *****/

if (Jet[i].y <= Jet[i].hy)

{

// 播放爆炸声

char c1[50], c2[30], c3[30];

sprintf(c1, "open ./fire/bomb.wav alias n%d", i);

sprintf(c2, "play n%d", i);

sprintf(c3, "close s%d", i);

mciSendString(c3, 0, 0, 0);

mciSendString(c1, 0, 0, 0);

mciSendString(c2, 0, 0, 0);

putimage(Jet[i].x, Jet[i].y, &Jet[i].img[Jet[i].n], SRCINVERT); // 擦掉烟花弹

Fire[i].x = Jet[i].hx + 10; // 在烟花弹中间爆炸

Fire[i].y = Jet[i].hy; // 在最高点绽放

Fire[i].show = true; // 开始绽放

Jet[i].shoot = false; // 停止发射

}

Jet[i].t1 = Jet[i].t2;

}

}

}

// 显示花样

void Style(DWORD& st1)

{

DWORD st2 = timeGetTime();

if (st2 - st1 >20000) // 一首歌的时间

{

// 心形坐标

int x[13] = { 60, 75, 91, 100, 95, 75, 60, 45, 25, 15, 25, 41, 60 };

int y[13] = { 65, 53, 40, 22, 5, 4, 20, 4, 5, 22, 40, 53, 65 };

for (int i = 0; i < NUM; i++)

{

//cleardevice();

/**** 规律分布烟花弹 ***/

Jet[i].x = x[i] * 10;

Jet[i].y = (y[i] + 75) * 10;

Jet[i].hx = Jet[i].x;

Jet[i].hy = y[i] * 10;

Jet[i].height = Jet[i].y - Jet[i].hy;

Jet[i].shoot = true;

Jet[i].dt = 7;

putimage(Jet[i].x, Jet[i].y, &Jet[i].img[Jet[i].n], SRCINVERT); // 显示烟花弹

/**** 设置烟花参数 ***/

Fire[i].x = Jet[i].x + 10;

Fire[i].y = Jet[i].hy;

Fire[i].show = false;

Fire[i].r = 0;

/**** 播放发射声音 ***/

char c1[50], c2[30], c3[30];

sprintf(c1, "open ./fire/shoot.mp3 alias s%d", i);

sprintf(c2, "play s%d", i);

sprintf(c3, "close n%d", i);

mciSendString(c3, 0, 0, 0);

mciSendString(c1, 0, 0, 0);

mciSendString(c2, 0, 0, 0);

}

st1 = st2;

}

}

// 绽放烟花

void Show(DWORD* pMem)

{

// 烟花个阶段绽放时间间隔,制作变速绽放效果

int drt[16] = { 5, 5, 5, 5, 5, 6, 25, 25, 25, 25, 55, 55, 55, 55, 55 };

for (int i = 0; i < NUM; i++)

{

Fire[i].t2 = timeGetTime();

// 增加爆炸半径,绽放烟花,增加时间间隔做变速效果

if (Fire[i].t2 - Fire[i].t1 > Fire[i].dt && Fire[i].show == true)

{

if (Fire[i].r < Fire[i].max_r)

{

Fire[i].r++;

Fire[i].dt = drt[Fire[i].r / 10];

Fire[i].draw = true;

}

if (Fire[i].r >= Fire[i].max_r - 1)

{

Fire[i].draw = false;

Init(i);

}

Fire[i].t1 = Fire[i].t2;

}

// 如果该号炮花可爆炸,根据当前爆炸半径画烟花,颜色值接近黑色的不输出。

if (Fire[i].draw)

{

for (double a = 0; a <= 6.28; a += 0.01)

{

int x1 = (int)(Fire[i].cen_x + Fire[i].r * cos(a)); // 相对于图片左上角的坐标

int y1 = (int)(Fire[i].cen_y - Fire[i].r * sin(a));

if (x1 > 0 && x1 < Fire[i].width && y1 > 0 && y1 < Fire[i].height) // 只输出图片内的像素点

{

int b = Fire[i].xy[x1][y1] & 0xff;

int g = (Fire[i].xy[x1][y1] >> 8) & 0xff;

int r = (Fire[i].xy[x1][y1] >> 16);

// 烟花像素点在窗口上的坐标

int xx = (int)(Fire[i].x + Fire[i].r * cos(a));

int yy = (int)(Fire[i].y - Fire[i].r * sin(a));

// 较暗的像素点不输出、防止越界

if (r > 0x20 && g > 0x20 && b > 0x20 && xx > 0 && xx < 1200 && yy > 0 && yy < 800)

pMem[yy * 1200 + xx] = BGR(Fire[i].xy[x1][y1]); // 显存操作绘制烟花

}

}

Fire[i].draw = false;

}

}

}

这个代码是我朋友的朋友给她的,这个上面我只是改了一段文字,因为我觉得烟花是很漂亮,但是她的美都是很短暂.....

初学编程可以看看这段话

请不要做浮躁的人

很多人都会问,可以自学c/c++吗?

1、自学首先具备条件是时间充足,兴趣个毅力很关键。

2、因为你是在家自己练习,没有很好的学习编程的环境和资源,在学习的过程中会走很多弯路,所以兴趣和毅力是支撑你学下去的动力。

3不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想

出来再参考别人的提示,你就知道自己和别人思路的差异。

4看帮助,不要因为很难而自己是初学者所以就不看;帮助永远是最好的参考手册,

虽然帮助的文字有时候很难看懂,总觉得不够直观。

5读懂的书,请仔细看;看不懂的书,请硬着头皮看;别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;把在书中看到的有意义的例子扩充;并将其切实的运用到自己的工作中!

责任编辑:

表白神器java代码_程序员的表白神器代码相关推荐

  1. 用python表白代码_程序员python表白代码

    原博文 2019-06-13 17:33 − python表白代码 源代码如下: # -*- coding:utf-8 -*- import turtle import time # 画爱心的顶部 d ...

  2. java写一个简单的浪漫代码_程序员的浪漫弹窗表白,圣诞节给Ta惊喜吧(附源码,简单易学哦)...

    不要以为程序员都是木讷的,浪漫起来也会让很多妹子心动的.而程序员的表白方式也很不一般,通过一堆代码,无限释放浪漫.今天教给大家通过改写脚本语言,利用弹窗可充分自由发挥,用来表白或者恶搞都是不错的选择. ...

  3. java程序员可以只用windos吗_程序员要写多少代码 才能开发一个window操作系统

    开发一个window操作系统需要程序员写多少行代码呢? 微软的Windows系统是伴随我们已久的老朋友了,大多数人都是一代一代Windows的用上来,老用户几乎都形成一个共识,就是微软的系统有一代会很 ...

  4. 增删改查java代码_程序员:听说你正在为天天写增删改查代码而烦恼

    有相当多的一部分程序员一直都只接触业余应用的功能,天天写业务代码的程序员也被戏称为CURD程序员,CURD就是增(create).改(update).查(read).删(delete)的意思. CUR ...

  5. java浪漫代码_程序员表白代码,用过的人都找到了对象...

    在情人节送给自己的女朋友玫瑰花, 对于程序员来说是不是太普通了呢? 为什么不试试让情人节变得更特别一些呢? 作为一名程序员, 可以用自己的技术创造出不一样的浪漫! 让你的女朋友眼前一亮,印象深刻. 这 ...

  6. typora的写java代码_程序员文档编辑神器typora

    今天锋哥推荐一款免费的文档编辑神器-typora Typora 是一款支持实时预览的 Markdown 文本编辑器.它有 OS X.Windows.Linux 三个平台的版本,并且由于仍在测试中,是完 ...

  7. pb代码graph绘图表_程序员轻松绘图神器

    ☞ 程序员进阶架构师必备资源免费送 ☜ 我们程序员在工作生活中,有很多场合下需要绘制图表,比如PPT里的图表,学习笔记的一些助记图,还有最常见的,工作中大量使用的流程图. 在 Window 下,我们有 ...

  8. java程序员拜年代码_程序员的新年祝福是什么样的?

    2019就要到来了, 马上要收到各种形形色色的新年祝福, 尽管有一些简单真诚的祝福语, 不过大多是千篇一律的罐头短信. 程序员作为一群高智商群体 在这辞旧迎新的时刻 怎么能一直玩那些老掉牙的梗呢! 你 ...

  9. java程序员的浪漫代码_程序员的“硬核”浪漫

    Do an act of kindness. Help one person SMILE! 昨天是世界微笑日,是唯一一个庆祝人类行为表情的节日. 但有这么一群人,在大家眼中他们是不善表达.思维怪异,甚 ...

  10. 不认识java代码_程序员进阶:优雅的代码对于一个架构师的重要性

    lison:复旦大学工程硕士,专注技术十年,产品控.代码控,拥有丰富的项目经验,主持研发了多个成功上线的大型互联网项目.热爱互联网,热衷于各种web技术,精通JAVA.J2EE和前端开发,擅长互联网高 ...

最新文章

  1. 算法c语言源码_C语言实现推箱子
  2. android textView设置粗体
  3. 15-mysql-进阶九-联合查询
  4. javascript 动态创建表格:新增、删除行和单元格
  5. Responsive自适应网页设计与ResponsiveColumn自适应列实例
  6. BigDecimal参数8种舍入方式
  7. Thread函数的参数传递和线程所有权转移(2.2)--std::move()
  8. Android 100个实例
  9. 关于伺服驱动控制的课本_三菱伺服驱动器-说明书.pdf
  10. 二维傅里叶变换的意义
  11. POI设置导出的EXCEL锁定指定的单元格
  12. 统计遗传学:第五章,多基因评分PGS
  13. 打印系统开发(6)——纸张尺寸对照表如下
  14. 参加第2届全国高校大数据教学研讨会总结
  15. 10天竟然只写了一行代码,谁的锅?
  16. 在Mac的“邮件”中创建和使用电子邮件签名使用教程
  17. 计算机终桌面操作系统,支持国产电脑操作系统,光威、中兴新支点桌面系统首次触电...
  18. 文字图片行内垂直居中对齐方法
  19. 清华姚班学生ICML一人署名论文:协作学习的鲁棒性方法
  20. 二维数组正确初始化规则

热门文章

  1. 克鲁斯卡尔算法、并查集
  2. 怎么用电脑把优酷的kux格式转换成mp4格式
  3. 【JAVA】每日练习——02
  4. 开源离线语音识别(SpeechRecognition)
  5. java连接mysql,报错Could not create connection to database server.
  6. HTML5浏览器兼容性解决方案
  7. 简历制作器App使用条款
  8. 常州市行政地图矢量高清pdf区划彩色大图cdr或ai2020年
  9. latex 之好看的字体格式
  10. RT-Thread 应用笔记 - libmodbus RTU 编译问题的解决