Has pensado quizás en dar el salto completo y hacerlo con clases??
si, se que estás aprendiendo y que no lo entiendes aún, pero la mejor forma de entender una pieza fundamental de c++ es usándola.
Este es un ejercicio estupendo para practicar un montón de características de c++: clases, polimorfismo, herencia.
En caso negativo, crea funciones más sencillas... aunque salgan más. Te ayudarán a encontrar más facilmente errores como este:
if ((tablero[xinic][yinic]=="t1")||(tablero[xinic][yinic]=="t2"))
{
saltoPieza=false;
if ((xinic==xfin)||(yinic==yfin))
if (xinic==xfin)
{
if (yfin>yinic)
{
for (int i=yinic;i<=yfin-1;i++)
{
if ((tablero[xinic][i]!=tablero[xinic][yinic])&&(tablero[xinic][i]!=" "))
{
saltoPieza=true;
}
}
}
if (yfin<yinic)
{
for (int i=yinic;i>=yfin+1;i--)
{
if ((tablero[xinic][i]!=tablero[xinic][yinic])&&(tablero[xinic][i]!=" "))
{
saltoPieza=true;
}
}
}
}
if (yinic==yfin)
{
if (xfin>xinic)
{
for (int i=xinic;i<=xfin-1;i++)
{
if ((tablero[i][yinic]!=tablero[xinic][yinic])&&(tablero[i][yinic]!=" "))
{
saltoPieza=true;
}
}
}
if (xfin<xinic)
{
for (int i=xinic;i>=xfin+1;i--)
{
if ((tablero[i][yinic]!=tablero[xinic][yinic])&&(tablero[i][yinic]!=" "))
{
saltoPieza=true;
}
}
}
}
if (saltoPieza==false)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
Ese último else es el que te está matando...
mira, lo simplifico para que se vea mejor:
if ((tablero[xinic][yinic]=="t1")||(tablero[xinic][yinic]=="t2"))
{
// ...
}
else
{
return false;
}
Si no es torre te va a devolver false siempre.