0

我正在使用爸爸算法编写重铸游戏。我花了几个小时,但我无法调试显然返回错误值的代码。有时它会错过碰撞,或者为十几个不同的值返回相同的输出。如果有人可以查看我的代码并帮助我修复它,我会很高兴。

重铸代码

i - 光线索引(从 0 到 screen_width )

void Raycast::ray( int i , Player &player ) {
    double x = player.position.x , y = player.position.y;

    double theta = ( (double)player.angle - 100.0f * (double)i / (double)SCREEN_WIDTH ) * DEG2RAD;
    double sinus = sin(theta) , cosinus = cos(theta);

    double deltaX = 1 / sinus , deltaY = 1 / cosinus ;
    if( sinus == 0 ) deltaX = 0; if( cosinus == 0 ) deltaY = 0;
    

    double distX,distY;
    float stepX, stepY;

    if( sinus > 0 ) {
        stepX = 1;
        distX = ( (double)floor(y) - y + 1.0f ) * deltaX;
    } else {
        stepX = -1;
        distX = ( (double)floor(y) - y ) * deltaX;
    }

    if( cosinus > 0 ) {
        stepY = 1;
        distY = ( (double)floor(x) - x + 1.0f ) * deltaY;
    } else {
        stepY = -1;
        distY = ( (double)floor(x) - x ) * deltaY;
    }

    bool hit = true;
    while( hit ) {
        if( distX < distY ) {
            distX += deltaX;
            y += stepX;
        } else {
            distY += deltaY;
            x += stepY;
        }
        if( mapa[(int)x][(int)y] > 0 ) hit = 0;
    }

    double dist = sqrt( pow(player.position.x-x,2) + pow(player.position.y-y,2) );
    double len = SCREEN_HEIGHT / (2 * dist  );
    drawSegment( i , len , mapa[(int)y][(int)x] );
}

地图

数字代表颜色(0是空白)

int mapa[24][24] = {
            {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,4,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,3,0,2,4,0,3,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,4,3,2,3,4,3,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
4

0 回答 0