Operadores.c


#include "puzzle.h"
#include "estado.h"
#include "operadores.h"

extern nFilas, nColumnas;


estado* moverNorte(estado einicial)
{
  estado *pefinal;
  int filaEB = einicial.filaEspacioBlanco;
  int colEB = einicial.colEspacioBlanco;
  
  pefinal = crearEstado();
  copiarEstado(einicial,pefinal);
  pefinal->tablero[filaEB][colEB] = pefinal->tablero[filaEB-1][colEB];
  pefinal->tablero[filaEB-1][colEB] = VALOR_ESPACIO_BLANCO;
  
  pefinal->filaEspacioBlanco = filaEB - 1;
  
  return pefinal;
}

bool aplicableMoverNorte(estado e)
{
   return (e.filaEspacioBlanco > 0) ;
}



estado* moverSur(estado einicial)
{
  estado *pefinal;
  int filaEB = einicial.filaEspacioBlanco;
  int colEB = einicial.colEspacioBlanco;
  
  pefinal = crearEstado();
  copiarEstado(einicial,pefinal);
  pefinal->tablero[filaEB][colEB] = pefinal->tablero[filaEB+1][colEB];
  pefinal->tablero[filaEB+1][colEB] = VALOR_ESPACIO_BLANCO;
  
  pefinal->filaEspacioBlanco = filaEB + 1;
  
  return pefinal;
}

bool aplicableMoverSur(estado e)
{
   return (e.filaEspacioBlanco < (nFilas-1));
}


estado* moverOeste(estado einicial)
{
  estado *pefinal;
  int filaEB = einicial.filaEspacioBlanco;
  int colEB = einicial.colEspacioBlanco;
  
  pefinal = crearEstado();
  copiarEstado(einicial,pefinal);
  pefinal->tablero[filaEB][colEB] = pefinal->tablero[filaEB][colEB-1];
  pefinal->tablero[filaEB][colEB-1] = VALOR_ESPACIO_BLANCO;
  
  pefinal->colEspacioBlanco = colEB - 1;
  
  return pefinal;
}

bool aplicableMoverOeste(estado e)
{
   return (e.colEspacioBlanco > 0) ;
}


estado* moverEste(estado einicial)
{
  estado *pefinal;
  int filaEB = einicial.filaEspacioBlanco;
  int colEB = einicial.colEspacioBlanco;
  
  pefinal = crearEstado();
  copiarEstado(einicial,pefinal);
  pefinal->tablero[filaEB][colEB] = pefinal->tablero[filaEB][colEB+1];
  pefinal->tablero[filaEB][colEB+1] = VALOR_ESPACIO_BLANCO;

  pefinal->colEspacioBlanco = colEB + 1;
  
  return pefinal;
}

bool aplicableMoverEste(estado e)
{
   return (e.colEspacioBlanco < (nColumnas-1)) ;
}