该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#include //EasyX已包含,不包含也行
using namespace std; int j(int r); //绝对值函数 int main(void)
{
int x,y,r,xm,ym,rm,rmin,xc,yc,rc,count,ms;
//以下想x至ms为赋值区域,所有与长度有关的常量单位都是取决于分辨率
//rmin,xc,yc,rc等常量可取负值外,其余量取非负整数,否则或多或少会影响程序运行
count=3; //0<=count<=3,设定初始方向(与xc、yc正负相关)与判定撞击边缘位置以及弹回方向的常量
x=500; //初始横坐标 rm<=x<=xm-r
y=300; //初始纵坐标 rm<=y<=ym-r
rm=100; //最大半径
rmin=60; //最小半径
xm=1366; //x最大值
ym=768; //y最大值
xc=8; //x变化率,为零时纵向
yc=2; //y变化率,为零时横向
rc=1; //半径r变化率
r=rm; //初始半径为最大半径
ms=30; //单位(毫秒),用来控制变化快慢
initgraph(xm,ym);
setcolor(GREEN);
for(int i=0;;i++)
{
if(count==0)
{
for(;y+j(r)<=ym&&x+j(r)<=xm&&x>=r&&y>=r;x+=xc,y+=yc,r-=rc) //向右下
{
cleardevice();
circle(x,y,r);
Sleep(ms);
if(r
r+=rc;
rc=-rc;
}
if(r>rm){
r+=rc;
rc=-rc;
}
}
if(ym-y>xm-x){count=3;x=xm-r;} //撞右壁,向左下
if(ym-y
if(ym-y==xm-x){count=2;x=xm-r;y=ym-r;} //撞右下角,向左上
} if(count==1)
{
for(;y+j(r)<=ym&&x+j(r)<=xm&&x>=r&&y>=r;x+=xc,y-=yc,r-=rc) //向右上
{
cleardevice();
circle(x,y,r);
Sleep(ms);
if(r
r+=rc;
rc=-rc;
}
if(r>rm){
r+=rc;
rc=-rc;
}
}
if(y>xm-x){count=2;x=xm-r;} //撞右壁,向左上
if(y
if(y==xm-x){count=3;y=r;x=xm-r;} //撞右上角,向左下
} if(count==2)
{
for(;y+j(r)<=ym&&x+j(r)<=xm&&x>=r&&y>=r;x-=xc,y-=yc,r-=rc) //向左上
{
cleardevice();
circle(x,y,r);
Sleep(ms);
if(r
r+=rc;
rc=-rc;
}
if(r>rm){
r+=rc;
rc=-rc;
}
}
if(y>x){count=1;x=r;} //撞左壁,向右上
if(y
if(y==x){count=0;x=r;y=r;} //撞左上角,向右下
} if(count==3)
{
for(;y+j(r)<=ym&&x+j(r)<=xm&&x>=r&&y>=r;x-=xc,y+=yc,r-=rc) //向左下
{
cleardevice();
circle(x,y,r);
Sleep(ms);
if(r
r+=rc;
rc=-rc;
}
if(r>rm){
r+=rc;
rc=-rc;
}
}
if(x>ym-y){count=2;y=ym-r;} //撞下壁,向左上
if(x
if(x==ym-y){count=1;x=r;y=ym-r;} //撞左下角,向右上
}
}
// getch(); //防止程序运行后因编程工具立即终止习惯加的语句
return 0;
} int j(int r) //绝对值函数,保证r>0
{
if(r>0)return r;
else return -r;
}