[C] 纯文本查看 复制代码 #include <graphics.h> //包含EGE的头文件
#include<bits/stdc++.h>
using namespace std;
#include<time.h> //包含随机数,时间函数
int n;
int width =800;
int height =600;
int count1=0;
int time1=0;
float randx(int min,int max);
int is_ill(int i,int j);
struct ballon
{
float x;//ball[i].x坐标
float y;//ball[i].y坐标
float vx;//ball[i].x向速度
float vy;//ball[i].y向速度
int radius;//半径
float g;
int healthy;//0是健康 ,1是不健康
}ball[10001];
void start()//初始化
{
cout<<"输入球的个数1~10000:";
cin>>n;
srand(time(0));//随机种子函数
for(int i=0;i<n;i++)
{
ball[i].g=0;
ball[i].x = 50+randx(ball[i].radius,width);
ball[i].y = 30+randx(ball[i].radius,height);
ball[i].vx = randx(-2,4);
ball[i].vy = randx(-3,6);
ball[i].radius = randx(12,20);
ball[i].healthy=0;
}
ball[0].healthy=1;
count1=1;
initgraph(width, height); //初始化图形界面
setcolor(RED); //设置画图线为红色
setbkcolor(WHITE);//设置背景颜色为白色
setfillcolor(RED);//设置填充颜色为红色
setfont(25,0,"幼圆");//(字体高度,字体宽度(为0即为自适应),字形)设置字体为25,幼圆字体
setbkmode(TRANSPARENT); //设置文字背景色为透明(默认为有背景色)
}
void draw()//绘制
{
for(int i=0;i<n;i++)
{
if(ball[i].healthy==1) setfillcolor(RED);
else setfillcolor(GREEN);
fillellipse(ball[i].x, ball[i].y, ball[i].radius, ball[i].radius); //画一个实心圆
}
xyprintf(20,20,"病人数量:%d",count1);//格式化输出文字
xyprintf(20,40,"持续时间:%d",time1);//格式化输出文字
}
void update()
{
for(int i=0;i<n;i++)
{
ball[i].vy+=ball[i].g;
ball[i].y=ball[i].y+ball[i].vy;
ball[i].vx+=ball[i].g;
ball[i].x+=ball[i].vx;
if(ball[i].y>=height-ball[i].radius)
{
ball[i].y=height-ball[i].radius;
ball[i].vy=-ball[i].vy;
}
if(ball[i].y<=ball[i].radius)
{
ball[i].y=ball[i].radius;
ball[i].vy=-ball[i].vy;
}
if(ball[i].x>=width-ball[i].radius)
{
ball[i].x=width-ball[i].radius;
ball[i].vx=-ball[i].vx;
}
if(ball[i].x<=ball[i].radius)
{
ball[i].x=ball[i].radius;
ball[i].vx=-ball[i].vx;
}
}
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(is_ill(i,j)==1)
{
ball[i].healthy=1;
ball[j].healthy=1;
}
}
}
time1+=10;
}
int is_ill(int i,int j)
{
if((abs(ball[i].x-ball[j].x)+abs(ball[i].y-ball[j].y))<=ball[i].radius+ball[j].radius)
{
if(ball[i].healthy^ball[j].healthy==1)
{
int ran_a=randx(0,100);
if(ran_a<10)
{
count1++;
return 1;
}
}
}
return 0;
}
float randx(int min,int max)
{
float s=(((float)rand())/32767)*(max-min)+min;
return s;
}
int main()
{
start();
while(1)
{
update();
draw();
Sleep(10);
if(count1==n)
{
break;
}
cleardevice();
}
getch();
return 0;
}
|