Discuz! Board

 找回密码
 立即注册
查看: 107|回复: 3

杭天堃2024.4.5

[复制链接]

2

主题

8

帖子

36

积分

新手上路

Rank: 1

积分
36
发表于 2024-4-5 15:06:52 | 显示全部楼层 |阅读模式
[C] 纯文本查看 复制代码
#include <graphics.h>					//包含EGE的头文件
int x=200,vx=4,y=100,vy=4,g=1;
int main()
{
	initgraph(800, 600);				//初始化图形界面
	
	setcolor(RED);	//设置画图线为红色 
	
	setbkcolor(WHITE);//设置背景颜色为白色
	
	setfillcolor(RED);//设置填充颜色为红色
	while(1)
//	for(y=0;y<=600;y++) 
	{
		vy=vy+g;
		y=y+vy;
		
		if(y>=550||y<=50)
		vy=-vy;
		
		x=x+vx;
		if(x<=50||x>=750)
		vx=-vx;
		
		
		cleardevice();
		fillellipse(x, y, 50, 50); //画一个实心圆 
		Sleep(10);
	}
	
	//circle(400, 200, 50);           //画一个空心圆 圆心坐标(320,240),半径为100
	
	//floodfillsurface(400, 300, RED);
	
	getch();							//暂停,等待键盘按键
 
	closegraph();        //关闭图形界面
	
	return 0;
}
回复

使用道具 举报

574

主题

758

帖子

243万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2435189

烈空座 Lv:100
发表于 2024-4-6 09:24:05 | 显示全部楼层
[C] 纯文本查看 复制代码
#include <graphics.h>                 //包含EGE的头文件

int x[100],vx[100],y[100],vy[100];
int g[100];

void start()
{
	initgraph(800, 600);                //初始化图形界面
    setcolor(RED);  //设置画图线为红色
    setbkcolor(WHITE);//设置背景颜色为白色
    setfillcolor(RED);//设置填充颜色为红色
    
    for(int i=0;i<100;i++)
	{
		x[i]=100+10*i;
		y[i]=100;
		vx[i]=10;
		vy[i]=10;	
	} 
}

void draw()
{
	cleardevice();
    for(int i=0;i<100;i++)
    	fillellipse(x[i], y[i], 5, 5); //画一个实心圆
    Sleep(10);
}

void update()
{
	for(int i=0;i<100;i++)
	{
		vy[i]=vy[i]+g[i];
        y[i]=y[i]+vy[i];
         
        if(y[i]>=550||y[i]<=50)
        vy[i]=-vy[i];
         
        x[i]=x[i]+vx[i];
        if(x[i]<=50||x[i]>=750)
        vx[i]=-vx[i];
	}
}

int main()
{
    start(); 
    while(1)
    {
       update();
	   draw(); 
    }
     
    getch();                            //暂停,等待键盘按键
  
    closegraph();        //关闭图形界面
     
    return 0;
}
回复

使用道具 举报

574

主题

758

帖子

243万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2435189

烈空座 Lv:100
发表于 2024-4-6 09:30:04 | 显示全部楼层
#include <time.h>//包含随机数,时间函数
#include<bits/stdc++.h>

srand(time(0));//随机种子函数

rand();
回复

使用道具 举报

574

主题

758

帖子

243万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2435189

烈空座 Lv:100
发表于 2024-4-6 10:00:53 | 显示全部楼层
[C] 纯文本查看 复制代码
#include <graphics.h>//包含EGE的头文件
#include <time.h>//包含随机数,时间函数 
#include<bits/stdc++.h>
using namespace std;

int width =800;
int height =600;
int num;
int count1;
int time_count;
 
struct ballon{
	int x;//x坐标
	int y;//y坐标 
	int vx;//x向速度 
	int vy;//y向速度 
	int radius;//半径 
	int health; //健康 1 
}ball[1000]; 

int randx(int min,int max)
{
	int r =rand()%(max-min+1)+min;
	return r;	
} 

void startup()//初始化 函数 
{
	cout<<"请输入总人数(不大于1000):"; 
	cin>>num;
	srand(time(0));//随机种子函数 
	
	for(int i =0;i<num;i++)
	{
		ball[i].x = randx(30,width-30);
		ball[i].y = randx(30,height-30);
		ball[i].vx = randx(-2,2);
		ball[i].vy = randx(2,5);
		ball[i].radius = randx(5,10);	
		ball[i].health = 1;
	}
	
	ball[0].health = 0;//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].x += ball[i].vx;
		ball[i].y += ball[i].vy;
		
		if(ball[i].x<=ball[i].radius || ball[i].x>=width-ball[i].radius)
			ball[i].vx = -ball[i].vx;
		if(ball[i].y<=ball[i].radius || ball[i].y>=height-ball[i].radius)
			ball[i].vy = -ball[i].vy;
	}
}

void drawball() //绘制小球 
{
	cleardevice();
	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); //画一个实心圆
	}
	xyprintf(20,20,"病人数量:%d",count1);//格式化输出文字
	xyprintf(20,60,"耗时:%d",time_count);//格式化输出文字
	Sleep(10); 
	time_count+=10;
}

int dis(int a,int b)
{
	int t1=pow(abs(ball[a].x-ball[b].x),2);
	int t2=pow(abs(ball[a].y-ball[b].y),2);
	return sqrt(t1+t2);
}

void is_ill()
{
	for(int i=0;i<num;i++)
		for(int j=i;j<num;j++)
		{
			if((ball[i].health+ball[j].health==1)&&	//或者用异或^ 
				(dis(i,j)<(ball[i].radius+ball[j].radius)))//距离够近 
			{
				int ran_a= randx(0,100);//rand()%100 
				if(ran_a<30)//戴口罩
				{
					ball[i].health = 0;//得病 
					ball[j].health = 0;
					count1++;
				} 
			}
		}
//	for(int i=0;i<num;i++)
//	for(int j=i+1;j<num;j++)
//	{
//		if(ball[i].health+ball[j].health==1)
//		{
//			int x=abs(ball[i].x-ball[j].x);
//			int y=abs(ball[i].y-ball[j].y);
//			int s=sqrt(pow(x,2)+pow(y,2));
//			if(s<=(ball[i].radius+ball[j].radius))
//			{
//				ball[i].health = 0;//得病 
//				ball[j].health = 0;
//			}
//		}	
//	}

	
	
}

int main()
{
	startup();//初始化 
	while(1)
	{
		update(); //更新数据 
		is_ill();//判断生病 
		drawball();//绘制小球 
		if(count1==num) break; 
	} 
	
	getch();
	
	return 0;
}
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-2-13 02:09 , Processed in 0.053725 second(s), 30 queries .

Powered by Discuz! X3.4

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

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