Discuz! Board

 找回密码
 立即注册
查看: 403|回复: 0

2022.12.10

[复制链接]

15

主题

19

帖子

4118

积分

论坛元老

Rank: 8Rank: 8

积分
4118

墨海马 Lv:15
发表于 2022-12-10 16:13:43 | 显示全部楼层 |阅读模式
[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;
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-5-30 12:19 , Processed in 0.060789 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表