1. 程式人生 > >用EasyX繪製多球碰撞中的碰撞程式碼

用EasyX繪製多球碰撞中的碰撞程式碼

float minDistances2[BallNum][2]; // 記錄某個小球,距離它最近的小球的距離,這個小球的下標
        for (i=0;i<BallNum;i++)
        {
            minDistances2[i][0] = 9999999;
            minDistances2[i][1] = -1;
        }

        // 求解所有小球兩兩之間的距離平方
        for (i=0;i<BallNum;i++)
        {
            for (j=0;j<BallNum;j++)
            {
                if
(i!=j) // 自己和自己不需要比 { float dist2; dist2 = (ball_x[i] - ball_x[j])*(ball_x[i] - ball_x[j]) + (ball_y[i] - ball_y[j])*(ball_y[i] - ball_y[j]); if (dist2<minDistances2[i][0]) { minDistances2[i][0
] = dist2; minDistances2[i][1] = j; } } } } // 判斷球之間是否碰撞 for (i=0;i<BallNum;i++) { if (minDistances2[i][0]<=4*radius*radius) // 最小距離小於閾值,發生碰撞 { j = minDistances2[i][1
]; // 交換速度 int temp; temp = ball_vx[i]; ball_vx[i] = ball_vx[j]; ball_vx[j] = temp; temp = ball_vy[i]; ball_vy[i] = ball_vy[j]; ball_vy[j] = temp; minDistances2[j][0] = 999999999; // 避免交換兩次速度,又回去了 minDistances2[j][1] = -1; } }