Discuz! Board

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

ball 3.0

[复制链接]

27

主题

29

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
14147
发表于 2022-11-12 14:46:37 | 显示全部楼层 |阅读模式
[C] 纯文本查看 复制代码
#include<bits/stdc++.h>
#include <graphics.h> //包含EGE的头文件
#include<time.h>
using namespace std;

int width=800;
int height=600;
int num;
int count1; 

struct ballon
{
	float x;//ball[i].x坐标
    float y;//ball[i].y坐标
    float vx;//ball[i].x向速度
    float vy;//ball[i].y向速度
    int radius;//半径
    int health;//健康=1,不健康=0 
    float g;
}ball[1000];

void  start()
{
	cout<<"请输入球的数量:"; 
    cin>>num;
	srand(time(0));//随机种子函数     
	
    for(int i=0;i<num;i++)
    {
    	ball[i].x=rand()%400+50;
    	ball[i].y=rand()%300+50;
    	ball[i].vx=1+rand()%3;
    	ball[i].vy=1+rand()%5;
    	ball[i].radius=rand()%5+10;
    	ball[i].g=0;
    	ball[i].health=1;
	}
     
    ball[0].health=0;
    count1=1;
     
    initgraph(width, height);               //初始化图形界面
    setcolor(GREEN);  //设置画图线为红色
    setbkcolor(WHITE);//设置背景颜色为白色
    setfillcolor(GREEN);//设置填充颜色为红色
    setfont(25,0,"幼圆");//(字体高度,字体宽度(为0即为自适应),字形)设置字体为25,幼圆字体
    setbkmode(TRANSPARENT); //设置文字背景色为透明(默认为有背景色)
}

void update()//数据更新
{
	for(int i=0;i<num;i++)
    	{
    		ball[i].vy=ball[i].vy+ball[i].g;
			ball[i].vx=ball[i].vx+ball[i].g;
        	ball[i].y=ball[i].y+ball[i].vy;
        	ball[i].x=ball[i].x+ball[i].vx;
			if(ball[i].y>=height-ball[i].radius)
			{
				ball[i].vy=-ball[i].vy;
			}
			else 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;
			}
			else if(ball[i].x<=ball[i].radius)
			{
				ball[i].vx=-ball[i].vx;
			}
		
    
    
        
		}
}

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

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].health^ball[j].health)==1))
			{
				int s=rand()%100;
				if(s<1)
				{
					ball[i].health=0;
					ball[j].health=0;
					count1++;
				}
				
			}
		}
	}
	
}


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

回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-2-13 04:54 , Processed in 0.050408 second(s), 26 queries .

Powered by Discuz! X3.4

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

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