网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
04月20日
漏签
0
天
easyx吧
关注:
10,877
贴子:
46,621
看贴
图片
吧主推荐
游戏
11
回复贴,共
1
页
<<返回easyx吧
>0< 加载中...
占坑贴,一个冒泡泡的程序
取消只看楼主
收藏
回复
psjoweb51250
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
因为还在写代码,先占一个坑,把前面的代码贴上来,后面写的复杂了就不太好区分了。
psjoweb51250
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这是文件结构,后面分别贴上不同文件的源代码
psjoweb51250
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
Particle.h
#pragma once
#undef UNICODE
#undef _UNICODE
#include<math.h>
#include<time.h>
#include<conio.h>
#include <graphics.h>
#include <list>
#include <tchar.h>
#include <string>
using namespace std;
#define NORMAL 0
#define BOOMING 1
#define BOOMED 2
#define WIDTH 640*2
#define HEIGHT 600
struct Pos{
int x;
int y;
};
struct Speed{
int x;
int y;
};
class Settings
{
private:
class Basic{
public:
int p_count ;
int min_angle;
int angle_range;
int min_speed;
int speed_range;
int min_life ;
int life_range;
int min_size;
int size_range;
};
class MyColor{
public:
COLORREF rbg;
double light;
};
public:
Settings(void);
~Settings(void);
Basic basic;
MyColor startColor[3];
MyColor endColor[5];
};
class Particle
{
public:
bool dead;
Particle();
Particle(int x,int y,int speed,int life ,int angle ,int size);
~Particle(void);
int life;
int lived;
int angle;
int size;
Pos pos;
Speed sd;
};
class Emitter
{
public:
Emitter(void);
Emitter(int x,int y,Settings ss,int bm);
~Emitter(void);
void update();
private:
Settings thisSet;
list<Particle> fireParticles;
Pos pos;
Speed speed;
long lastUpdateTime;
double eachEmissionLife;
int createEmissionTime;
int boom;
};
psjoweb51250
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
Emitter.cpp
#include "Particle.h"
Emitter::Emitter(void)
{
}
Emitter::Emitter(int x,int y,Settings ss,int bm){
pos.x = x;
pos.y = y;
thisSet = ss;
eachEmissionLife = 1000 / thisSet.basic.p_count;
lastUpdateTime = 0;
createEmissionTime = 0;
boom = bm;
}
Emitter::~Emitter(void)
{
}
void Emitter::update(){
setfillcolor(WHITE);
if(lastUpdateTime==0){
lastUpdateTime = clock();
return ;
}
clock_t now = clock();
double duration = now - lastUpdateTime;
if(this->boom > NORMAL){
this->createEmissionTime =1000;
}else{
this->createEmissionTime+=duration;
}
lastUpdateTime = clock();
if (this->createEmissionTime>this->eachEmissionLife && this->boom<BOOMED)
{
if (this->boom==BOOMING)
{
this->boom = BOOMED;
}
int particleCount = this->createEmissionTime / this->eachEmissionLife;
this->createEmissionTime -= particleCount*this->eachEmissionLife;
while (particleCount--)
{
this->fireParticles.push_back( Particle(
this->pos.x,
this->pos.y,
this->thisSet.basic.min_speed + rand() % (this->thisSet.basic.speed_range),
this->thisSet.basic.min_life + rand() % (this->thisSet.basic.life_range),
this->thisSet.basic.min_angle + rand() % (this->thisSet.basic.angle_range),
this->thisSet.basic.min_size + rand() % (this->thisSet.basic.size_range))
);
}
}
int pcounts=this->fireParticles.size();
list<Particle>::iterator particle;
//此处可能出现问题,因为迭代器不一定可以修改到list本身
string p2=" duration"+to_string(long long (duration));
outtextxy(10,10,p2.c_str());
//getch();
for ( particle=this->fireParticles.begin();particle!=fireParticles.end();)
{
if (particle->dead)
{
this->fireParticles.erase(particle++);
continue;
}
particle->lived+=duration;
string p1 ="p->life :"+to_string(long long (particle->life));
outtextxy(10,230,p1.c_str());
if (particle->lived > particle->life)
{
particle->dead = true;
particle++;
continue;
}
particle->pos.x += particle->sd.x * duration /1000 ;
particle->pos.y += particle->sd.y * duration /1000 ;
string p ="p->lived :"+to_string(long long (particle->pos.x));
outtextxy(10,100,p.c_str());
setfillcolor(WHITE);
fillcircle(particle->pos.x,particle->pos.y,particle->size);
particle++;
}
}
psjoweb51250
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
Settings.cpp
#include "Particle.h"
Settings::Settings(void)
{
basic.p_count =50;
basic.min_angle=0;
basic.angle_range= 360;
basic.min_speed =10;
basic.speed_range =100;
basic.min_life = 1000;
basic.life_range =1000;
basic.min_size =1;
basic.size_range=3;
/*int order =0;
MyColor *color = startColor;
color[order].light = 0;
color[order].rbg = RGB(2, 252, 102);
order++;
color[order].light = 0;
color[order].rbg = RGB(2, 252, 102);
order++;
color[order].light = 0;
color[order].rbg = RGB(2, 252, 102);
order =0;
color = endColor;
color[order].light = 1;
color[order].rbg = RGB(193,5,4);
order++;
color[order].light = 1;
color[order].rbg = RGB(251,229,4);
order++;
color[order].light = 1;
color[order].rbg = RGB(225,186,221);
order++;
color[order].light = 1;
color[order].rbg = RGB(232,136,11);
order++;
color[order].light = 1;
color[order].rbg = RGB(207,5,1);*/
}
Settings::~Settings(void)
{
}
psjoweb51250
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
Start.cpp
psjoweb51250
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
#include"Particle.h"
void main(){
srand((unsigned int) time(NULL));
initgraph(WIDTH, HEIGHT);
Emitter em(WIDTH/2,HEIGHT/2,Settings(),NORMAL);
int i=20;
BeginBatchDraw();
while (i)
{
em.update();
FlushBatchDraw();
Sleep(100);
cleardevice();
}
EndBatchDraw();
closegraph();
}
psjoweb51250
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
注释暂时没加,只是占坑,村长手下留情勿删。
psjoweb51250
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
当前效果
psjoweb51250
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
加入颜色之后
psjoweb51250
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
加入重力
psjoweb51250
幼儿园
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
通过改变配置,同时控制两个发射器对象,做出一个粒子烟花效果
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示