קוד:
void cWorld::buildRoad(point &pos,point &add,int size)
{
int i = pos.y,j = pos.x,counter=0;
int scalar =size+5;// rand() % int(n-n*0.9)+5;
if ( (terrain[i][j].flag == false && terrain[i][j].object == NULL) || ((terrain[i][j].flag == true && terrain[i][j].object !=NULL) ))
{
while( ((terrain[i][j].flag == false && terrain[i][j].object == NULL) || ((terrain[i][j].flag == true && terrain[i][j].object !=NULL) )) && counter <= size)
{
if (add.x)
{
terrain[i][j].object = new cRoad(i,j,true) ;
}
else
{
terrain[i][j].object = new cRoad(i,j,false) ;
}
terrain[i][j].flag=true;
i+= add.y;
j+= add.x;
counter++;
}
if (add.x == 1 && !add.y)
{
if(terrain[i-1][j].object == NULL && terrain[i+1][j].object == NULL && terrain[i+1][j+2].object == NULL && terrain[i-1][j+2].object == NULL )
{
buildRoad(point(j,i),point(0,1),scalar);
buildRoad(point(j,i),point(0,-1),scalar);
}
else
{
// buildRoad(point(j,i),add,scalar);
}
}
else if ( add.x == -1 && !add.y)
{
if(terrain[i-1][j].object == NULL && terrain[i+1][j].object == NULL && terrain[i-1][j-2].object == NULL && terrain[i+1][j-2].object == NULL )
{
buildRoad(point(j,i),point(0,1),scalar);
buildRoad(point(j,i),point(0,-1),scalar);
}
else
{
//buildRoad(point(j,i),add,scalar);
}
}
if (!add.x && add.y == -1)
{
if(terrain[i][j+1].object == NULL && terrain[i][j-1].object == NULL && terrain[i+2][j+1].object == NULL && terrain[i+2][j-1].object == NULL )
{
buildRoad(point(j,i),point(-1,0),scalar);
buildRoad(point(j,i),point(1,0),scalar);
}
else
{
// buildRoad(point(j,i),add,scalar);
}
}
else if ( !add.x && add.y == 1 )
{
if(terrain[i][j+1].object == NULL && terrain[i][j-1].object == NULL && terrain[i-2][j-1].object == NULL && terrain[i-2][j+1].object == NULL )
{
buildRoad(point(j,i),point(-1,0),scalar);
buildRoad(point(j,i),point(1,0),scalar);
}
else
{
// buildRoad(point(j,i),add,scalar);
}
}
}
}