|
#include <graphics.h> //包含EGE的头文件
#include<bits/stdc++.h>
#include <time.h>
using namespace std; //包含随机数,时间函数
int width =800;
int height =600;
float g=0;
int num;
struct ballon
{
int ill;//0健康,1生病
float x;
float y;
float vx;
float vy;
float radius;
}ball[100];
void start()//初始化
{
cin>>num;
srand(time(0));//随机种子函数
for(int i=0;i<num;i++)
{
ball[i].ill=0;
ball[i].x=rand()%400+100;//ball[i].x坐标
ball[i].y=rand()%300+100;//ball[i].y坐标
ball[i].vx=rand()%7+2;//ball[i].x向速度
ball[i].vy=rand()%3+1;//ball[i].y向速度
ball[i].radius=rand()%10+5;//半径
}
ball[0].ill=1;
initgraph(width, height); //初始化图形界面
setcolor(YELLOW); //设置画图线为红色
setbkcolor(WHITE);//设置背景颜色为白色
setfillcolor(GREEN);//设置填充颜色为红色
}
void update()//数据更新
{
for(int i=0;i<num;i++)
{
ball[i].x=ball[i].x+ball[i].vx;
ball[i].y=ball[i].y+ball[i].vy;
ball[i].vy=ball[i].vy+g;
if(ball[i].y>=height-ball[i].radius)
{
ball[i].vy=-ball[i].vy;
}
if(ball[i].y<=ball[i].radius)
{
ball[i].vy=-ball[i].vy;
}
if(ball[i].x>=width-ball[i].radius)
{
ball[i].vx=-ball[i].vx;
}
if(ball[i].x<=ball[i].radius)
{
ball[i].vx=-ball[i].vx;
}
}
}
void is_ill()
{
for(int i=0;i<num;i++)
{
for(int j=0;j<num;j++)
{
if( (abs(ball[i].x-ball[j].x)+abs(ball[i].y-ball[j].y))<=(ball[i].radius+ball[j].radius)&&
(ball[i].ill+ball[j].ill==1))
{
ball[i].ill=1;
ball[j].ill=1;
}
}
}
}
void draw()//绘制小球
{
for(int i=0;i<num;i++)
{
if(ball[i].ill==1)
{
setfillcolor(RED);
}
else
{
setfillcolor(GREEN);
}
fillellipse(ball[i].x, ball[i].y, ball[i].radius, ball[i].radius); //画一个实心圆
}
Sleep(10);
cleardevice();
}
int main()
{
start();
while(1)
{
is_ill();
update();
draw();
}
return 0;
}
|
|