资源简介
这是一个用VC实现的演化程序,效果很好,可以帮助初学者学到很多东西。
代码片段和文件信息
/********************************************************
* *
* 程序名称:祝福烟花,祝福朋友 *
* 编译环境:VC++6.0 && easyx(立冬版) *
* 作者相关:yy滺滺__<837943056@qq.com> *
* 最后修改:2012.11.22 *
* *
********************************************************/
#include
#include
#include
#include
#include
#include
#include // 使用该计时器必须包含的文件
#pragma comment ( lib “Winmm.lib“ )
/***** 宏定义区 ******/
#define NUM 13 // 烟花种类数量宏定义
/***** 结构定义区 **********/
// 烟花结构
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];
// happy birthday 艺术字结构
struct HAPPY // 储存 Happy Birthday 艺术字图片
{
int x y; // 每个字的图片的左上角坐标
IMAGE img; // 储存单个字图片
static int num; // 字母序号
}Happy[NUM];
int HAPPY::num = 0;
// For.2012の夭女 结构
struct WISH // 滚动祝福图片结构
{
int x y; // 图片左上角坐标
DWORD t1 t2 dt; // 图片运动时间间隔
IMAGE img; // 储存图片
int dxy; // 每次的移动量
byte dir : 1; // 限制两个滚动方向
}Wish;
/**** 函数申明区 ****/
void Init ( int ); // 初始化烟花
void Load ( ); // 加载烟花图片
void Shoot ( ); // 发射烟花
void Chose ( DWORD& ); // 筛选烟花
void Wishing( ); // 滚动祝福
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 );
setfillstyle( 0 );
setfont ( 36 0 “楷体“ );
setcolor ( RED );
outtextxy ( 370 90 “微博:林超杰做一个有思想的人“ );
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 ); // 绽放烟花
Wishing ( ); // 滚动字符
style ( st1 ); // 花样发射
FlushBatchDraw( ); // 显示前面的所有绘图操作
}
}
// 初始化烟花参数
void Init( int i )
{
// 分别为:烟花中心到图片边缘的最远距离、烟花中心到图片左上角的距离 (x、y) 两个分量
int r[13] = { 120 120 155 123 130 147 138 138 130 13
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-08-13 10:46 firework\
目录 0 2013-08-13 10:02 firework\Debug\
文件 3764 2013-08-12 13:05 firework\Debug\ico.res
文件 319559 2013-08-13 10:02 firework\Debug\main.exe
文件 488744 2013-08-13 10:02 firework\Debug\main.ilk
文件 41243 2013-08-13 10:02 firework\Debug\main.obj
文件 4098252 2013-08-12 13:05 firework\Debug\main.pch
文件 689152 2013-08-13 10:02 firework\Debug\main.pdb
文件 181248 2013-08-13 10:42 firework\Debug\vc60.idb
文件 94208 2013-08-13 10:02 firework\Debug\vc60.pdb
文件 3638 2012-11-22 12:29 firework\MSN.ICO
目录 0 2013-08-13 10:02 firework\fire\
文件 4341059 2012-11-18 20:32 firework\fire\bk.mp3
文件 82412 2012-11-16 12:21 firework\fire\bomb.wav
文件 2246454 2012-11-18 15:53 firework\fire\flower.jpg
文件 16441 2013-08-12 14:27 firework\fire\happy.jpg
文件 17764 2012-11-18 16:03 firework\fire\shoot.jpg
文件 89486 2012-07-18 18:23 firework\fire\shoot.mp3
文件 31448 2013-08-13 10:01 firework\fire\yaojing.jpg
文件 35028 2012-11-22 12:29 firework\ico.aps
文件 1719 2012-11-22 12:29 firework\ico.rc
文件 488 2012-11-22 12:28 firework\ico.rct
文件 3764 2012-11-22 12:29 firework\ico.res
文件 11558 2013-08-13 10:02 firework\main.cpp
文件 3496 2012-11-22 12:35 firework\main.dsp
文件 533 2012-11-22 12:16 firework\main.dsw
文件 319559 2013-08-13 10:02 firework\运行.exe
文件 50176 2013-08-13 10:43 firework\main.ncb
文件 48640 2013-08-13 10:43 firework\main.opt
文件 1156 2013-08-13 10:02 firework\main.plg
文件 452 2012-11-22 12:29 firework\resource.h
............此处省略0个文件信息
评论
共有 条评论