Discuz! Board

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

SS

[复制链接]

15

主题

15

帖子

209

积分

中级会员

Rank: 3Rank: 3

积分
209
发表于 2022-11-12 11:36:08 | 显示全部楼层 |阅读模式
# include<bits/stdc++.h>
#include <graphics.h>
#include <math.h>
#include<time.h> //包含随机数,时间函数                 //包含EGE的头文件
using namespace std;

int width =800;
int height =600;
int num;       
int count1,time_count=0;
struct ballon
{
    float x;//ball[i].x坐标
    float y;//ball[i].y坐标
    float vx;//ball[i].x向速度
    float g;
    float vy;//ball[i].y向速度
    int radius;//半径
           int healthy;//健康 1是健康 0是生病
}ball[100000];

float ranx(int min,int max)
{
        return min+rand()%(max-min);
}

void start()//初始化
{
    srand(time(0));//随机种子函数
        for(int i=0;i<num;i++)
        {
            ball[i].x=rand()%width;//x坐标
            ball[i].y=rand()%height;//y坐标
            ball[i].vx=fmod(rand(),3);//x向速度
            ball[i].g=0;
            ball[i].vy=rand()%5;//y向速度
            ball[i].radius =ranx(5,16);//半径
            ball[i].healthy=1;
        }
        ball[0].healthy=0;
        count1=1;
    initgraph(width, height);        //初始化图形界面
    setcolor(RED);  //设置画图线为红色
    setbkcolor(WHITE);//设置背景颜色为白色
    setfillcolor(GREEN);//设置填充颜色为红色
            setfont(25,0,"幼圆");//(字体高度,字体宽度(为0即为自适应),字形)设置字体为25,幼圆字体
        setbkmode(TRANSPARENT); //设置文字背景色为透明(默认为有背景色)       
}

void update()//数据更新
{
        for(int i=0;i<num;i++)
        {
                ball[i].vx+=ball[i].g;
            ball[i].vy+=ball[i].g;
                    ball[i].y+=ball[i].vy;
                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].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].vx=-ball[i].vx;
                }                  
        }
       
        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].healthy+ball[j].healthy==1))
                           {
                                   ball[i].healthy=0;
                                   count1++;
                                ball[j].healthy=0;
                        }
                }       
        }
       
}

void drawball()//画小球
{
        for(int i=0;i<num;i++)
        {
                if (ball[i].healthy==1)
                {
                        setfillcolor(GREEN);
                }
                else
            {
                        setfillcolor(RED);
                }
                fillellipse(ball[i].x, ball[i].y, ball[i].radius, ball[i].radius); //画一个实心圆       
        }
        xyprintf(20,20,"病人数量:%d",count1);//格式化输出文字
        xyprintf(20,60,"耗时:%d",time_count);//格式化输出文字
        Sleep(10);
        time_count=time_count+10;
        cleardevice();
}

int main()
{
        cin>>num;
        start();
    while(1)
    {
            update();
                drawball();
                if (count1==num)
                {
                        break;
                }
               
    }
     getch();
    return 0;
}

回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-5-30 12:29 , Processed in 0.071171 second(s), 25 queries .

Powered by Discuz! X3.4

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

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