Discuz! Board

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

[复制链接]

6

主题

7

帖子

2142

积分

金牌会员

Rank: 6Rank: 6

积分
2142
发表于 2022-11-13 12:33:18 | 显示全部楼层 |阅读模式
#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;
}
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-2-13 05:11 , Processed in 0.048742 second(s), 26 queries .

Powered by Discuz! X3.4

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

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