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