c++/easyx之烟花

// 程序名称:烟花
// 编译环境:VC6.0,EasyX


#include<graphics.h>
#include<cmath>
#include<conio.h>
#define PI 3.1415926
void star(int x,int y); //画星星
void drawmoon(); //画月亮
void drawstar(); //画星空
void starflower1(); //烟花绽放1
void starflower2(); //烟花绽放2


int main()
{
int i;
initgraph(640, 480); // 初始化绘图窗口
line(100, 421, 540, 421); // 画地平线
drawstar(); //画星空
while(!kbhit())
{
starflower1(); //烟花绽放函数1
starflower2(); //烟花绽放函数2
Sleep(10);
}
getch();
closegraph(); // 关闭绘图窗口
return 0;
}


void star(int x,int y) //画星星函数
{
int i,a;
int n=5;
int x1[5],y1[5],x2[5],y2[5];
setcolor(YELLOW);
for(i=0;i<5;i++)
{
x1[i]=(int)(x+n*cos(i*72*PI/180) + 1);
y1[i]=(int)(y+n*sin(i*72*PI/180) + 1);
x2[i]=(int)(x+n/2*cos(i*72*PI/180+PI/5) + 1);
y2[i]=(int)(y+n/2*sin(i*72*PI/180+PI/5) + 1);
}
for(i=0;i<5;i++)
{
a=i+1;
if(a>4) a=0;
line(x1[i],y1[i],x2[i],y2[i]); //两点间画直线
line(x2[i],y2[i],x1[a],y1[a]);
}
}


void drawmoon() //画月亮
{
setfillcolor(WHITE);
//fillcircle(550,80,40);//画圆(有边框)
solidcircle(550,80,40);//画圆(无边框)
}


void drawstar() //画星空
{
int a[]={40,250,140,140,90,350,300};
int b[]={40,25,99,100,98,60,78},i;
//setfillstyle(1,14);
for(i=0;i<10;i++)
{
star(a[i],b[i]);
floodfill(a[i],b[i],YELLOW);
}
drawmoon();
}


void starflower1() //烟花绽放函数1
{
    double h,v,dv; // 高度, 速度(方向向下),加速度(每 1/50 秒)
 {
 h=470,v= 54,dv= 9.8 / 10;
while(h>=200) 
{
h-=(v - dv / 2);
v = v * 0.9;
setcolor(GREEN);
setfillcolor(RED);//填充颜色为蓝色
fillcircle(300,int(h), 5);
  Sleep(20); // 延时
// 擦掉球 
   setcolor(BLACK);
   setfillcolor(BLACK);//填充颜色为黑色
   fillcircle(300,int(h), 5);
Sleep(10);
}
 }
}


void starflower2() //烟花绽放函数2
{
int i=0,j,n=60, x=300,y=200, px,py;
while(1)
{
if(i<100)
{
for(j=0;j<n;j++)
{
px=(int)(x+i*cos(j*360/n*PI/180) + 1);
py=(int)(y+i*sin(j*360/n*PI/180) + 1);
putpixel(px-1,py,BLUE);
   putpixel(px,py+1,BLUE);
putpixel(px+1,py-1,YELLOW);
putpixel(px,py-1,YELLOW);
putpixel(px+1,py,RED);
putpixel(px+1,py+1,RED);
}
//画圆擦掉
Sleep(10);
setfillcolor(BLACK);
solidcircle(300,200,101);
}
i+=2;
if(i>=100) break;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值