no has iniciado el valor de d_i y d_j contienen basura, tienes que pedirlos con scanf, acuerdate que lo pides pero cuando el jugador quiere mover no cuando quiere atacar.
Edito:Mira las siguientes lineas, solo tendrías que comprobar mediante otro metodo si se ha ingresado una Acción válida, o sea si se estan cumpliendo las reglas del juego:
else if(accion == 't'){
bool AccionValida = false;
while(AccionValida == false)
{
printf("Ingresa coordenada destino d_i"); printf("Ingresa coordenada destino d_j");
/*Creas un metodo para comprobar si ha realizado un movimiento legal, esto es, si no se ha salido del
tablero, si no ha disparado a más de 5 posiciones o si ha disparado a travez de un arbol*/
AccionValida = ComprobarAccion(o_i,o_j,d_i,d_j);
if(AccionValida == false)
printf("Accion Invalida(Rompiste alguna regla del juego); Intenta de nuevo\n"); }
/*Las siguientes lineas de código se ejecutaran siempre y cuando se haya ingresado una accion válida: */
if(turno == 1)
/*En caso de que sea turno del jugador 1*/
if( tableroXxX[d_i][d_j - 97 ] == '2' )
{
ganador = 1;
}
else
{
}
else if(turno == 2)
/*En caso de que sea turno del jugador 2*/
if( tableroXxX[d_i][d_j - 97 ] == '1' )
{
ganador = 2;
}
else
{
}
}
}
fijate en
ComprobarAccion(o_i,o_j,d_i,d_j);, es una funcion con 4 parámetros, necesitas a parte de pedir las coordenadas de destino, también necesitas pedir las coordenadas de origen para que puedas saber si se ha realizado un movimiento legal, acuerdate que solo pides las coordenadas cuando el jugador se quiere mover, pero no lo haces cuando el jugador quiere atacar.