#ifndef _OPERADORES_H
#define _OPERADORES_H
#include "estado.h"
#define NUM_OPERADORES 4
typedef struct
{
bool (*aplicable)(estado); /* aplicable: estado -> bool */
estado* (*aplicar)(estado); /* aplicar: estado -> estado */
} operador;
estado* moverNorte(estado);
bool aplicableMoverNorte(estado);
estado* moverSur(estado);
bool aplicableMoverSur(estado);
estado* moverEste(estado);
bool aplicableMoverEste(estado);
estado* moverOeste(estado);
bool aplicableMoverOeste(estado);
#endif
En este fichero están las definiciones referentes a los operadores y su aplicación:
- tenemos la definición de la constante NUM_OPERADORES que corresponde con los, como máximo, cuatro posibles movimientos de una ficha
- definimos la estructura operador formada por los siguientes dos campos
- aplicable correspondiente a una función que dado un estado nos dice si un operador es aplicable o no
- aplicar que dado un estado le aplica el correspondiente operador devolviendo un puntero al estado resultante.
- al final se encuentran los prototipos de las funciones correspondientes a los distintos operadores (moverNorte,...) y los de las funciones que verifican la posibilidad de aplicación de un determinado operador (aplicableMoverNorte,...). Estas funciones se introducirán en un array de elementos del tipo operador.