# include & ltstdio.h & gt
# include & ltgraphics.h & gt
# include & ltmath.h & gt
# include & ltstdlib.h & gt
# include & ltdos.h & gt
# include & lttime.h & gt
# include & ltbios.h & gt
#定義最大值12
typedef結構
{
浮點x,y;
浮點vx,vy;
int顏色;
}球;
void main()
{
int gd=DETECT,gm,I,j,k,t;
ball ba[MAX];
浮點dt = 7e-2;
int issuit(ball *,int I);
void hitpro(ball*,int,int);
registerbgidriver(EGA VGA _ driver);
init graph(& amp;gd,& ampgm,“”;
srand(time(NULL));
for(I = 0;我& ltMAXi++)
{
巴[我]。x =(rand()% 5+1)* 116;
巴[我]。y =(rand()% 3+1)* 116;
如果(!issuit(ba,I)){ I-;繼續;}
巴[我]。VX = rand()% 50-25;
巴[我]。vy = rand()% 50-25;
巴[我]。color = I+1;
}
巴[6]。color = 14;
巴[7]。color = 13;
而(!bioskey(1))
{
for(I = 0;我& ltMAXi++)
{
巴[我]。x+=ba[i]。vx * dt
巴[我]。y+=ba[i]。vy * dt
}
for(j = 0;j & ltMAXj++)
{
for(k = j+1;k & ltMAXk++) hitpro(ba,j,k);
if (ba[j].x & lt51 | |巴[j].x & gt589)巴[j]。vx=-ba[j]。VX;
if (ba[j].y & lt51 | |巴[j].y & gt429)巴[j]。vy=-ba[j]。vy;
}
clear device();
for(I = 0;我& lt4 *最大;i++)
{
t = i % MAX
setcolor(ba[t].顏色);
圓(ba[t]。x,ba[t]。y,50);
}
延遲(2000年);
}
closegraph();
}
int issuit( ball *b1,int n)
{
int i,a,b,c,d;
a=b1[n]。x;
b=b1[n]。y;
for(I = 0;我& ltn;i++)
{
c=b1[i]。x;
d=b1[i]。y;
if(a = = c & amp;& ampb==d)返回0;
}
返回1;
}
void hitpro(ball *ba,int j,int k)
{
float r,a,b,c,d,tx1,tx2,ty1,ty2,tem
tem=(ba[k].x-ba[j]。x)*(ba[k]。x-ba[j]。x)+(ba[k]。y-ba[j]。y)*(ba[k]。y-ba[j]。y);
r = sqrt(tem);
if(r & gt;102.0)返回;
a=(ba[k]。x-ba[j]。x)/r;
b=(ba[k]。y-ba[j]。y)/r;
c =-b;
d = a;
r = sqrt(c * c+d * d);
c/= r;
d/= r;
tx1=ba[j]。vx*a+ba[j]。vy * b;
ty1=ba[j]。vx*c+ba[j]。vy * d;
tx2=ba[k]。vx*a+ba[k]。vy * b;
ty2=ba[k]。vx*c+ba[k]。vy * d;
巴[j]。VX = tx2 * a+ty 1 * c;
巴[j]。vy = tx2 * b+ty 1 * d;
巴[k]。VX = tx 1 * a+ty2 * c;
巴[k]。vy = tx 1 * b+ty2 * d;
}