Untitled

 avatar
unknown
plain_text
4 months ago
2.4 kB
2
Indexable
float cornerdistance(int x1, int y1, int x2, int y2){
    float distance=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))+5;
    return distance;
}
float linedistance(int x1, int y1, int x2, int y2, int c1, int c2){
    if(x1==x2){
        return abs(c1-x1)+5;
    }
    if(y1==y2){
        return abs(c2-y1)+5;
    }
    //float m=(y1-y2)/(x1-x2);
    //return abs(m*c1-c2+(y1-m*x1))/sqrt(m*m +1);
}

void checkcollision() {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            if (bricks[i][j].show == 1) {
                if (ballx >= bricks[i][j].x && ballx <= bricks[i][j].x + bricks[i][j].width) {
                    if (linedistance(bricks[i][j].x, bricks[i][j].y, bricks[i][j].x + bricks[i][j].width, bricks[i][j].y, ballx, bally) <= radiusball ||
                        linedistance(bricks[i][j].x, bricks[i][j].y + bricks[i][j].height, bricks[i][j].x + bricks[i][j].width, bricks[i][j].y + bricks[i][j].height, ballx, bally) <= radiusball) {
                        dy *= -1;
                        bricks[i][j].show = 0;
                        return;
                    }
                } else if (bally >= bricks[i][j].y && bally <= bricks[i][j].y + bricks[i][j].height) {
                    if (linedistance(bricks[i][j].x, bricks[i][j].y, bricks[i][j].x, bricks[i][j].y + bricks[i][j].height, ballx, bally) <= radiusball ||
                        linedistance(bricks[i][j].x + bricks[i][j].width, bricks[i][j].y, bricks[i][j].x + bricks[i][j].width, bricks[i][j].y + bricks[i][j].height, ballx, bally) <= radiusball) {
                        dx *= -1;
                        bricks[i][j].show = 0;
                        return;
                    }
                }
                if (cornerdistance(bricks[i][j].x, bricks[i][j].y, ballx, bally) <= radiusball ||
                    cornerdistance(bricks[i][j].x + bricks[i][j].width, bricks[i][j].y, ballx, bally) <= radiusball ||
                    cornerdistance(bricks[i][j].x + bricks[i][j].width, bricks[i][j].y + bricks[i][j].height, ballx, bally) <= radiusball ||
                    cornerdistance(bricks[i][j].x, bricks[i][j].y + bricks[i][j].height, ballx, bally) <= radiusball) {
                    dx *= -1;
                    dy *= -1;
                    bricks[i][j].show = 0;
                    return;
                }
            }
        }
    }
}
Editor is loading...
Leave a Comment