diff --git a/README.md b/README.md index 38d26d2..49fb09f 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,8 @@ $ ./domino ## Screenshots -![Start game](https://raw.githubusercontent.com/pakozm/domino-clips/master/screenshots/start_game.png) +![Start game](doc/screenshots/start_game.png) -![In game](https://raw.githubusercontent.com/pakozm/domino-clips/master/screenshots/in_game.png) +![In game](doc/screenshots/in_game.png) -![Finish game](https://raw.githubusercontent.com/pakozm/domino-clips/master/screenshots/finish_game.png) +![Finish game](doc/screenshots/finish_game.png) diff --git a/refranes/ficha24.pdf b/doc/ficha24.pdf similarity index 100% rename from refranes/ficha24.pdf rename to doc/ficha24.pdf diff --git a/doc/screenshots/finish_game.png b/doc/screenshots/finish_game.png new file mode 100644 index 0000000..39d4f6d Binary files /dev/null and b/doc/screenshots/finish_game.png differ diff --git a/doc/screenshots/in_game.png b/doc/screenshots/in_game.png new file mode 100644 index 0000000..9923bda Binary files /dev/null and b/doc/screenshots/in_game.png differ diff --git a/doc/screenshots/start_game.png b/doc/screenshots/start_game.png new file mode 100644 index 0000000..a2fda42 Binary files /dev/null and b/doc/screenshots/start_game.png differ diff --git a/screenshots/finish_game.png b/screenshots/finish_game.png deleted file mode 100644 index 521d153..0000000 Binary files a/screenshots/finish_game.png and /dev/null differ diff --git a/screenshots/in_game.png b/screenshots/in_game.png deleted file mode 100644 index 86431e5..0000000 Binary files a/screenshots/in_game.png and /dev/null differ diff --git a/screenshots/start_game.png b/screenshots/start_game.png deleted file mode 100644 index 51da16e..0000000 Binary files a/screenshots/start_game.png and /dev/null differ diff --git a/src/C_elige_jugadores.c b/src/C_elige_jugadores.c index 13cdfae..af38f09 100644 --- a/src/C_elige_jugadores.c +++ b/src/C_elige_jugadores.c @@ -1,5 +1,6 @@ #include "C_defs.h" #include "SDL.h" +#include "SDL_image.h" /* Superficies */ extern SDL_Surface *screen, *msg, *mesa; @@ -15,9 +16,9 @@ SDL_Surface *load(const char *file); SDL_Surface *load(const char *file) { Uint32 blanco; - SDL_Surface *tmp=SDL_LoadBMP(file), *aux; + SDL_Surface *tmp=IMG_Load (file), *aux; if (tmp == NULL) { - fprintf (stderr, "Error al cargar la imagen: mesa.bmp\n%s\n", + fprintf (stderr, "Error al cargar la imagen: mesa.png\n%s\n", SDL_GetError()); return NULL; } @@ -40,17 +41,17 @@ void C_elige_jugadores(void *environment, DATA_OBJECT_PTR returnValuePtr) SDL_Rect rect; int i; - j[0]=load("seleccion/jugador0.bmp"); - j[1]=load("seleccion/jugador1.bmp"); - j[2]=load("seleccion/jugador2.bmp"); - j[3]=load("seleccion/jugador3.bmp"); + j[0]=load("seleccion/jugador0.png"); + j[1]=load("seleccion/jugador1.png"); + j[2]=load("seleccion/jugador2.png"); + j[3]=load("seleccion/jugador3.png"); - mano_negro=load("seleccion/mano_negro.bmp"); - mano_rojo=load("seleccion/mano_rojo.bmp"); - humano_negro=load("seleccion/humano_negro.bmp"); - humano_rojo=load("seleccion/humano_rojo.bmp"); - cpu_negro=load("seleccion/cpu_negro.bmp"); - cpu_rojo=load("seleccion/cpu_rojo.bmp"); + mano_negro=load("seleccion/mano_negro.png"); + mano_rojo=load("seleccion/mano_rojo.png"); + humano_negro=load("seleccion/humano_negro.png"); + humano_rojo=load("seleccion/humano_rojo.png"); + cpu_negro=load("seleccion/cpu_negro.png"); + cpu_rojo=load("seleccion/cpu_rojo.png"); do { rect.x = MSG_X; diff --git a/src/C_fichas.c b/src/C_fichas.c index 67f9148..13cdaa8 100644 --- a/src/C_fichas.c +++ b/src/C_fichas.c @@ -1,19 +1,20 @@ #include #include "SDL.h" +#include "SDL_image.h" #include "C_defs.h" extern SDL_Surface *num_fichas; const char * const fichas_str[]={ - "cantidades/jugador0.bmp", - "cantidades/jugador1.bmp", - "cantidades/jugador2.bmp", - "cantidades/jugador3.bmp", - "cantidades/cero.bmp", "cantidades/uno.bmp", - "cantidades/dos.bmp", - "cantidades/tres.bmp", "cantidades/cuatro.bmp", - "cantidades/cinco.bmp", "cantidades/seis.bmp", - "cantidades/siete.bmp" + "cantidades/jugador0.png", + "cantidades/jugador1.png", + "cantidades/jugador2.png", + "cantidades/jugador3.png", + "cantidades/cero.png", "cantidades/uno.png", + "cantidades/dos.png", + "cantidades/tres.png", "cantidades/cuatro.png", + "cantidades/cinco.png", "cantidades/seis.png", + "cantidades/siete.png" }; void C_fichas(void *environment) @@ -22,14 +23,14 @@ void C_fichas(void *environment) unsigned long int j=EnvRtnLong(environment, 1), n=EnvRtnLong(environment, 2); SDL_Surface *tmp, *aux, *num; - tmp = SDL_LoadBMP(fichas_str[j]); + tmp = IMG_Load (fichas_str[j]); if (tmp == NULL) { fprintf (stderr, "Error al cargar la imagen: %s\n%s\n", fichas_str[j], SDL_GetError()); } aux=SDL_DisplayFormat(tmp); SDL_FreeSurface (tmp); - tmp=SDL_LoadBMP(fichas_str[n+4]); + tmp=IMG_Load (fichas_str[n+4]); if (tmp == NULL) { fprintf (stderr, "Error al cargar la imagen: %s\n%s\n", fichas_str[n+4], SDL_GetError()); diff --git a/src/C_msg.c b/src/C_msg.c index 470ad7c..90edf2e 100644 --- a/src/C_msg.c +++ b/src/C_msg.c @@ -1,5 +1,6 @@ #include #include "SDL.h" +#include "SDL_image.h" #include "C_defs.h" extern SDL_Surface *msg; @@ -16,16 +17,16 @@ enum { } msg_e; const char * const msg_str[]={ -"msg_bmp/base.bmp", "msg_bmp/ecolocar.bmp", -"msg_bmp/eponer.bmp", "msg_bmp/escoge.bmp", -"msg_bmp/gana0.bmp", "msg_bmp/gana1.bmp", -"msg_bmp/gana2.bmp", "msg_bmp/gana3.bmp", -"msg_bmp/nadie_puede_poner_mas_fichas.bmp", -"msg_bmp/pasa0.bmp", "msg_bmp/pasa1.bmp", -"msg_bmp/pasa2.bmp", "msg_bmp/pasa3.bmp", -"msg_bmp/tipojugador.bmp", -"msg_bmp/turno0.bmp", "msg_bmp/turno1.bmp", -"msg_bmp/turno2.bmp", "msg_bmp/turno3.bmp" +"msg_bmp/base.png", "msg_bmp/ecolocar.png", +"msg_bmp/eponer.png", "msg_bmp/escoge.png", +"msg_bmp/gana0.png", "msg_bmp/gana1.png", +"msg_bmp/gana2.png", "msg_bmp/gana3.png", +"msg_bmp/nadie_puede_poner_mas_fichas.png", +"msg_bmp/pasa0.png", "msg_bmp/pasa1.png", +"msg_bmp/pasa2.png", "msg_bmp/pasa3.png", +"msg_bmp/tipojugador.png", +"msg_bmp/turno0.png", "msg_bmp/turno1.png", +"msg_bmp/turno2.png", "msg_bmp/turno3.png" }; void C_msg(void *environment) @@ -39,7 +40,7 @@ void C_msg(void *environment) if (EnvRtnArgCount(environment)>1) msg_time=EnvRtnLong(environment, 2); else msg_time=-1; - tmp=SDL_LoadBMP(msg_str[m]); + tmp=IMG_Load (msg_str[m]); if (tmp == NULL) { fprintf (stderr, "Error al cargar la imagen: %s\n%s\n", msg_str[m], SDL_GetError()); diff --git a/src/C_sdl_init.c b/src/C_sdl_init.c index 9db8f43..a2b5418 100644 --- a/src/C_sdl_init.c +++ b/src/C_sdl_init.c @@ -1,6 +1,7 @@ #include #include #include "SDL.h" +#include "SDL_image.h" #include "C_defs.h" SDL_Surface *screen, *mesa, *msg, *num_fichas; @@ -66,9 +67,9 @@ static void GenerarFichas() Uint32 color; SDL_Surface *circulo, *tmp; int i, j, f=0; - tmp = SDL_LoadBMP ("circulo.bmp"); + tmp = IMG_Load ("circulo.png"); if (tmp == NULL) { - fprintf (stderr, "Error al cargar la imagen: circulo.bmp\n%s\n", + fprintf (stderr, "Error al cargar la imagen: circulo.png\n%s\n", SDL_GetError()); } circulo = SDL_DisplayFormat (tmp); @@ -79,36 +80,36 @@ static void GenerarFichas() for (j=i; j<7; ++j, ++f) { fichas[f].x = i; fichas[f].y = j; - tmp=SDL_LoadBMP("fichaV.bmp"); + tmp=IMG_Load("fichaV.png"); if (tmp == NULL) { - fprintf (stderr, "Error al cargar la imagen: fichaV.bmp\n%s\n", + fprintf (stderr, "Error al cargar la imagen: fichaV.png\n%s\n", SDL_GetError()); } fichas[f].bmpV[1] = SDL_DisplayFormat (tmp); SDL_FreeSurface(tmp); PonerCirculo (circulo, fichas[f].bmpV[1], j, 0); PonerCirculo (circulo, fichas[f].bmpV[1], i, 1); - tmp=SDL_LoadBMP("fichaV.bmp"); + tmp=IMG_Load("fichaV.png"); if (tmp == NULL) { - fprintf (stderr, "Error al cargar la imagen: fichaV.bmp\n%s\n", + fprintf (stderr, "Error al cargar la imagen: fichaV.png\n%s\n", SDL_GetError()); } fichas[f].bmpV[0] = SDL_DisplayFormat (tmp); SDL_FreeSurface(tmp); PonerCirculo (circulo, fichas[f].bmpV[0], i, 0); PonerCirculo (circulo, fichas[f].bmpV[0], j, 1); - tmp=SDL_LoadBMP("fichaH.bmp"); + tmp=IMG_Load("fichaH.png"); if (tmp == NULL) { - fprintf (stderr, "Error al cargar la imagen: fichaH.bmp\n%s\n", + fprintf (stderr, "Error al cargar la imagen: fichaH.png\n%s\n", SDL_GetError()); } fichas[f].bmpH[1] = SDL_DisplayFormat (tmp); SDL_FreeSurface(tmp); PonerCirculo (circulo, fichas[f].bmpH[1], j, 2); PonerCirculo (circulo, fichas[f].bmpH[1], i, 3); - tmp=SDL_LoadBMP("fichaH.bmp"); + tmp=IMG_Load("fichaH.png"); if (tmp == NULL) { - fprintf (stderr, "Error al cargar la imagen: fichaH.bmp\n%s\n", + fprintf (stderr, "Error al cargar la imagen: fichaH.png\n%s\n", SDL_GetError()); } fichas[f].bmpH[0] = SDL_DisplayFormat (tmp); @@ -150,9 +151,9 @@ void C_sdl_init(void *environment) head.w = fichaW; head.h = fichaH; tail = head; tail.x -= fichaH; - tmp = SDL_LoadBMP ("mesa.bmp"); + tmp = IMG_Load ("mesa.png"); if (tmp == NULL) { - fprintf (stderr, "Error al cargar la imagen: mesa.bmp\n%s\n", + fprintf (stderr, "Error al cargar la imagen: mesa.png\n%s\n", SDL_GetError()); } mesa = SDL_DisplayFormat (tmp); diff --git a/src/makefile b/src/Makefile similarity index 99% rename from src/makefile rename to src/Makefile index dd92291..f9839d7 100644 --- a/src/makefile +++ b/src/Makefile @@ -48,10 +48,10 @@ all: domino clips `sdl-config --cflags` $< clips : $(OBJS) main.o - gcc -o clips main.o $(OBJS) -lm -ltermcap `sdl-config --cflags --libs` + gcc -o clips main.o $(OBJS) -lm -ltermcap `sdl-config --cflags --libs` -lSDL_image domino: $(OBJS) domino.o - gcc -o domino domino.o $(OBJS) -lm -ltermcap `sdl-config --cflags --libs` + gcc -o domino domino.o $(OBJS) -lm -ltermcap `sdl-config --cflags --libs` -lSDL_image agenda.o : agenda.c setup.h envrnmnt.h usrsetup.h argacces.h expressn.h exprnops.h \ diff --git a/src/cantidades/cero.bmp b/src/cantidades/cero.bmp deleted file mode 100644 index f12c601..0000000 Binary files a/src/cantidades/cero.bmp and /dev/null differ diff --git a/src/cantidades/cero.png b/src/cantidades/cero.png new file mode 100644 index 0000000..d0671f5 Binary files /dev/null and b/src/cantidades/cero.png differ diff --git a/src/cantidades/cinco.bmp b/src/cantidades/cinco.bmp deleted file mode 100644 index 3a4e90a..0000000 Binary files a/src/cantidades/cinco.bmp and /dev/null differ diff --git a/src/cantidades/cinco.png b/src/cantidades/cinco.png new file mode 100644 index 0000000..8ad9af2 Binary files /dev/null and b/src/cantidades/cinco.png differ diff --git a/src/cantidades/cuatro.bmp b/src/cantidades/cuatro.bmp deleted file mode 100644 index 7b49f06..0000000 Binary files a/src/cantidades/cuatro.bmp and /dev/null differ diff --git a/src/cantidades/cuatro.png b/src/cantidades/cuatro.png new file mode 100644 index 0000000..50bc454 Binary files /dev/null and b/src/cantidades/cuatro.png differ diff --git a/src/cantidades/dos.bmp b/src/cantidades/dos.bmp deleted file mode 100644 index a83fc33..0000000 Binary files a/src/cantidades/dos.bmp and /dev/null differ diff --git a/src/cantidades/dos.png b/src/cantidades/dos.png new file mode 100644 index 0000000..55e808c Binary files /dev/null and b/src/cantidades/dos.png differ diff --git a/src/cantidades/jugador0.bmp b/src/cantidades/jugador0.bmp deleted file mode 100644 index ddb9a3d..0000000 Binary files a/src/cantidades/jugador0.bmp and /dev/null differ diff --git a/src/cantidades/jugador0.png b/src/cantidades/jugador0.png new file mode 100644 index 0000000..8af8dca Binary files /dev/null and b/src/cantidades/jugador0.png differ diff --git a/src/cantidades/jugador1.bmp b/src/cantidades/jugador1.bmp deleted file mode 100644 index c2c69b0..0000000 Binary files a/src/cantidades/jugador1.bmp and /dev/null differ diff --git a/src/cantidades/jugador1.png b/src/cantidades/jugador1.png new file mode 100644 index 0000000..11ec7ca Binary files /dev/null and b/src/cantidades/jugador1.png differ diff --git a/src/cantidades/jugador2.bmp b/src/cantidades/jugador2.bmp deleted file mode 100644 index 66bcb87..0000000 Binary files a/src/cantidades/jugador2.bmp and /dev/null differ diff --git a/src/cantidades/jugador2.png b/src/cantidades/jugador2.png new file mode 100644 index 0000000..dd86a83 Binary files /dev/null and b/src/cantidades/jugador2.png differ diff --git a/src/cantidades/jugador3.bmp b/src/cantidades/jugador3.bmp deleted file mode 100644 index 035efd2..0000000 Binary files a/src/cantidades/jugador3.bmp and /dev/null differ diff --git a/src/cantidades/jugador3.png b/src/cantidades/jugador3.png new file mode 100644 index 0000000..ebe6f75 Binary files /dev/null and b/src/cantidades/jugador3.png differ diff --git a/src/cantidades/seis.bmp b/src/cantidades/seis.bmp deleted file mode 100644 index 0e61240..0000000 Binary files a/src/cantidades/seis.bmp and /dev/null differ diff --git a/src/cantidades/seis.png b/src/cantidades/seis.png new file mode 100644 index 0000000..bdd8c43 Binary files /dev/null and b/src/cantidades/seis.png differ diff --git a/src/cantidades/siete.bmp b/src/cantidades/siete.bmp deleted file mode 100644 index 970f32f..0000000 Binary files a/src/cantidades/siete.bmp and /dev/null differ diff --git a/src/cantidades/siete.png b/src/cantidades/siete.png new file mode 100644 index 0000000..0af594c Binary files /dev/null and b/src/cantidades/siete.png differ diff --git a/src/cantidades/tres.bmp b/src/cantidades/tres.bmp deleted file mode 100644 index b738943..0000000 Binary files a/src/cantidades/tres.bmp and /dev/null differ diff --git a/src/cantidades/tres.png b/src/cantidades/tres.png new file mode 100644 index 0000000..79cc746 Binary files /dev/null and b/src/cantidades/tres.png differ diff --git a/src/cantidades/uno.bmp b/src/cantidades/uno.bmp deleted file mode 100644 index e3f274f..0000000 Binary files a/src/cantidades/uno.bmp and /dev/null differ diff --git a/src/cantidades/uno.png b/src/cantidades/uno.png new file mode 100644 index 0000000..1f41aee Binary files /dev/null and b/src/cantidades/uno.png differ diff --git a/src/circulo.bmp b/src/circulo.bmp deleted file mode 100644 index bea09e3..0000000 Binary files a/src/circulo.bmp and /dev/null differ diff --git a/src/circulo.png b/src/circulo.png new file mode 100644 index 0000000..c6fc4e7 Binary files /dev/null and b/src/circulo.png differ diff --git a/src/fichaH.bmp b/src/fichaH.bmp deleted file mode 100644 index 9ebf530..0000000 Binary files a/src/fichaH.bmp and /dev/null differ diff --git a/src/fichaH.png b/src/fichaH.png new file mode 100644 index 0000000..962f71d Binary files /dev/null and b/src/fichaH.png differ diff --git a/src/fichaV.bmp b/src/fichaV.bmp deleted file mode 100644 index 8e80ba2..0000000 Binary files a/src/fichaV.bmp and /dev/null differ diff --git a/src/fichaV.png b/src/fichaV.png new file mode 100644 index 0000000..b651190 Binary files /dev/null and b/src/fichaV.png differ diff --git a/src/mesa.bmp b/src/mesa.bmp deleted file mode 100644 index 89f398b..0000000 Binary files a/src/mesa.bmp and /dev/null differ diff --git a/src/mesa.png b/src/mesa.png new file mode 100644 index 0000000..114d70e Binary files /dev/null and b/src/mesa.png differ diff --git a/src/msg_bmp/base.bmp b/src/msg_bmp/base.bmp deleted file mode 100644 index f29ac93..0000000 Binary files a/src/msg_bmp/base.bmp and /dev/null differ diff --git a/src/msg_bmp/base.png b/src/msg_bmp/base.png new file mode 100644 index 0000000..a4349c4 Binary files /dev/null and b/src/msg_bmp/base.png differ diff --git a/src/msg_bmp/ecolocar.bmp b/src/msg_bmp/ecolocar.bmp deleted file mode 100644 index f067fad..0000000 Binary files a/src/msg_bmp/ecolocar.bmp and /dev/null differ diff --git a/src/msg_bmp/ecolocar.png b/src/msg_bmp/ecolocar.png new file mode 100644 index 0000000..b842400 Binary files /dev/null and b/src/msg_bmp/ecolocar.png differ diff --git a/src/msg_bmp/eponer.bmp b/src/msg_bmp/eponer.bmp deleted file mode 100644 index fb3660f..0000000 Binary files a/src/msg_bmp/eponer.bmp and /dev/null differ diff --git a/src/msg_bmp/eponer.png b/src/msg_bmp/eponer.png new file mode 100644 index 0000000..e31387e Binary files /dev/null and b/src/msg_bmp/eponer.png differ diff --git a/src/msg_bmp/escoge.bmp b/src/msg_bmp/escoge.bmp deleted file mode 100644 index 9c66f2c..0000000 Binary files a/src/msg_bmp/escoge.bmp and /dev/null differ diff --git a/src/msg_bmp/escoge.png b/src/msg_bmp/escoge.png new file mode 100644 index 0000000..ca582ad Binary files /dev/null and b/src/msg_bmp/escoge.png differ diff --git a/src/msg_bmp/gana0.bmp b/src/msg_bmp/gana0.bmp deleted file mode 100644 index 1dcf087..0000000 Binary files a/src/msg_bmp/gana0.bmp and /dev/null differ diff --git a/src/msg_bmp/gana0.png b/src/msg_bmp/gana0.png new file mode 100644 index 0000000..010eb5d Binary files /dev/null and b/src/msg_bmp/gana0.png differ diff --git a/src/msg_bmp/gana1.bmp b/src/msg_bmp/gana1.bmp deleted file mode 100644 index 526192e..0000000 Binary files a/src/msg_bmp/gana1.bmp and /dev/null differ diff --git a/src/msg_bmp/gana1.png b/src/msg_bmp/gana1.png new file mode 100644 index 0000000..050f0a3 Binary files /dev/null and b/src/msg_bmp/gana1.png differ diff --git a/src/msg_bmp/gana2.bmp b/src/msg_bmp/gana2.bmp deleted file mode 100644 index 525f11f..0000000 Binary files a/src/msg_bmp/gana2.bmp and /dev/null differ diff --git a/src/msg_bmp/gana2.png b/src/msg_bmp/gana2.png new file mode 100644 index 0000000..52dc35a Binary files /dev/null and b/src/msg_bmp/gana2.png differ diff --git a/src/msg_bmp/gana3.bmp b/src/msg_bmp/gana3.bmp deleted file mode 100644 index 8c278b2..0000000 Binary files a/src/msg_bmp/gana3.bmp and /dev/null differ diff --git a/src/msg_bmp/gana3.png b/src/msg_bmp/gana3.png new file mode 100644 index 0000000..ee220a3 Binary files /dev/null and b/src/msg_bmp/gana3.png differ diff --git a/src/msg_bmp/nadie_puede_poner_mas_fichas.bmp b/src/msg_bmp/nadie_puede_poner_mas_fichas.bmp deleted file mode 100644 index cfae8a3..0000000 Binary files a/src/msg_bmp/nadie_puede_poner_mas_fichas.bmp and /dev/null differ diff --git a/src/msg_bmp/nadie_puede_poner_mas_fichas.png b/src/msg_bmp/nadie_puede_poner_mas_fichas.png new file mode 100644 index 0000000..16ad888 Binary files /dev/null and b/src/msg_bmp/nadie_puede_poner_mas_fichas.png differ diff --git a/src/msg_bmp/pasa0.bmp b/src/msg_bmp/pasa0.bmp deleted file mode 100644 index 5502ac8..0000000 Binary files a/src/msg_bmp/pasa0.bmp and /dev/null differ diff --git a/src/msg_bmp/pasa0.png b/src/msg_bmp/pasa0.png new file mode 100644 index 0000000..4de0987 Binary files /dev/null and b/src/msg_bmp/pasa0.png differ diff --git a/src/msg_bmp/pasa1.bmp b/src/msg_bmp/pasa1.bmp deleted file mode 100644 index d5eab9a..0000000 Binary files a/src/msg_bmp/pasa1.bmp and /dev/null differ diff --git a/src/msg_bmp/pasa1.png b/src/msg_bmp/pasa1.png new file mode 100644 index 0000000..2edbd15 Binary files /dev/null and b/src/msg_bmp/pasa1.png differ diff --git a/src/msg_bmp/pasa2.bmp b/src/msg_bmp/pasa2.bmp deleted file mode 100644 index 6dc908c..0000000 Binary files a/src/msg_bmp/pasa2.bmp and /dev/null differ diff --git a/src/msg_bmp/pasa2.png b/src/msg_bmp/pasa2.png new file mode 100644 index 0000000..b29a093 Binary files /dev/null and b/src/msg_bmp/pasa2.png differ diff --git a/src/msg_bmp/pasa3.bmp b/src/msg_bmp/pasa3.bmp deleted file mode 100644 index 7a5554a..0000000 Binary files a/src/msg_bmp/pasa3.bmp and /dev/null differ diff --git a/src/msg_bmp/pasa3.png b/src/msg_bmp/pasa3.png new file mode 100644 index 0000000..1d38e45 Binary files /dev/null and b/src/msg_bmp/pasa3.png differ diff --git a/src/msg_bmp/tipojugador.bmp b/src/msg_bmp/tipojugador.bmp deleted file mode 100644 index 32f410b..0000000 Binary files a/src/msg_bmp/tipojugador.bmp and /dev/null differ diff --git a/src/msg_bmp/tipojugador.png b/src/msg_bmp/tipojugador.png new file mode 100644 index 0000000..91a8696 Binary files /dev/null and b/src/msg_bmp/tipojugador.png differ diff --git a/src/msg_bmp/turno0.bmp b/src/msg_bmp/turno0.bmp deleted file mode 100644 index 774ae4b..0000000 Binary files a/src/msg_bmp/turno0.bmp and /dev/null differ diff --git a/src/msg_bmp/turno0.png b/src/msg_bmp/turno0.png new file mode 100644 index 0000000..87a05ca Binary files /dev/null and b/src/msg_bmp/turno0.png differ diff --git a/src/msg_bmp/turno1.bmp b/src/msg_bmp/turno1.bmp deleted file mode 100644 index 651be17..0000000 Binary files a/src/msg_bmp/turno1.bmp and /dev/null differ diff --git a/src/msg_bmp/turno1.png b/src/msg_bmp/turno1.png new file mode 100644 index 0000000..db3f551 Binary files /dev/null and b/src/msg_bmp/turno1.png differ diff --git a/src/msg_bmp/turno2.bmp b/src/msg_bmp/turno2.bmp deleted file mode 100644 index ef77ae3..0000000 Binary files a/src/msg_bmp/turno2.bmp and /dev/null differ diff --git a/src/msg_bmp/turno2.png b/src/msg_bmp/turno2.png new file mode 100644 index 0000000..65575bc Binary files /dev/null and b/src/msg_bmp/turno2.png differ diff --git a/src/msg_bmp/turno3.bmp b/src/msg_bmp/turno3.bmp deleted file mode 100644 index e389fe8..0000000 Binary files a/src/msg_bmp/turno3.bmp and /dev/null differ diff --git a/src/msg_bmp/turno3.png b/src/msg_bmp/turno3.png new file mode 100644 index 0000000..f490766 Binary files /dev/null and b/src/msg_bmp/turno3.png differ diff --git a/src/seleccion/cpu_negro.bmp b/src/seleccion/cpu_negro.bmp deleted file mode 100644 index 834bfc5..0000000 Binary files a/src/seleccion/cpu_negro.bmp and /dev/null differ diff --git a/src/seleccion/cpu_negro.png b/src/seleccion/cpu_negro.png new file mode 100644 index 0000000..4cd0ed4 Binary files /dev/null and b/src/seleccion/cpu_negro.png differ diff --git a/src/seleccion/cpu_rojo.bmp b/src/seleccion/cpu_rojo.bmp deleted file mode 100644 index ca998a1..0000000 Binary files a/src/seleccion/cpu_rojo.bmp and /dev/null differ diff --git a/src/seleccion/cpu_rojo.png b/src/seleccion/cpu_rojo.png new file mode 100644 index 0000000..a314cb6 Binary files /dev/null and b/src/seleccion/cpu_rojo.png differ diff --git a/src/seleccion/humano_negro.bmp b/src/seleccion/humano_negro.bmp deleted file mode 100644 index 3bebfc8..0000000 Binary files a/src/seleccion/humano_negro.bmp and /dev/null differ diff --git a/src/seleccion/humano_negro.png b/src/seleccion/humano_negro.png new file mode 100644 index 0000000..211c8c2 Binary files /dev/null and b/src/seleccion/humano_negro.png differ diff --git a/src/seleccion/humano_rojo.bmp b/src/seleccion/humano_rojo.bmp deleted file mode 100644 index 1a0f17f..0000000 Binary files a/src/seleccion/humano_rojo.bmp and /dev/null differ diff --git a/src/seleccion/humano_rojo.png b/src/seleccion/humano_rojo.png new file mode 100644 index 0000000..0b8434c Binary files /dev/null and b/src/seleccion/humano_rojo.png differ diff --git a/src/seleccion/jugador0.bmp b/src/seleccion/jugador0.bmp deleted file mode 100644 index 30a5bff..0000000 Binary files a/src/seleccion/jugador0.bmp and /dev/null differ diff --git a/src/seleccion/jugador0.png b/src/seleccion/jugador0.png new file mode 100644 index 0000000..f6e2061 Binary files /dev/null and b/src/seleccion/jugador0.png differ diff --git a/src/seleccion/jugador1.bmp b/src/seleccion/jugador1.bmp deleted file mode 100644 index 20131a2..0000000 Binary files a/src/seleccion/jugador1.bmp and /dev/null differ diff --git a/src/seleccion/jugador1.png b/src/seleccion/jugador1.png new file mode 100644 index 0000000..889a235 Binary files /dev/null and b/src/seleccion/jugador1.png differ diff --git a/src/seleccion/jugador2.bmp b/src/seleccion/jugador2.bmp deleted file mode 100644 index 02ce624..0000000 Binary files a/src/seleccion/jugador2.bmp and /dev/null differ diff --git a/src/seleccion/jugador2.png b/src/seleccion/jugador2.png new file mode 100644 index 0000000..a334205 Binary files /dev/null and b/src/seleccion/jugador2.png differ diff --git a/src/seleccion/jugador3.bmp b/src/seleccion/jugador3.bmp deleted file mode 100644 index 65157ca..0000000 Binary files a/src/seleccion/jugador3.bmp and /dev/null differ diff --git a/src/seleccion/jugador3.png b/src/seleccion/jugador3.png new file mode 100644 index 0000000..6ab0d73 Binary files /dev/null and b/src/seleccion/jugador3.png differ diff --git a/src/seleccion/mano_negro.bmp b/src/seleccion/mano_negro.bmp deleted file mode 100644 index 2348efb..0000000 Binary files a/src/seleccion/mano_negro.bmp and /dev/null differ diff --git a/src/seleccion/mano_negro.png b/src/seleccion/mano_negro.png new file mode 100644 index 0000000..4a488a1 Binary files /dev/null and b/src/seleccion/mano_negro.png differ diff --git a/src/seleccion/mano_rojo.bmp b/src/seleccion/mano_rojo.bmp deleted file mode 100644 index fe92657..0000000 Binary files a/src/seleccion/mano_rojo.bmp and /dev/null differ diff --git a/src/seleccion/mano_rojo.png b/src/seleccion/mano_rojo.png new file mode 100644 index 0000000..c810934 Binary files /dev/null and b/src/seleccion/mano_rojo.png differ diff --git a/src/win/cantidades/cero.bmp b/src/win/cantidades/cero.bmp deleted file mode 100644 index f12c601..0000000 Binary files a/src/win/cantidades/cero.bmp and /dev/null differ diff --git a/src/win/cantidades/cinco.bmp b/src/win/cantidades/cinco.bmp deleted file mode 100644 index 3a4e90a..0000000 Binary files a/src/win/cantidades/cinco.bmp and /dev/null differ diff --git a/src/win/cantidades/cuatro.bmp b/src/win/cantidades/cuatro.bmp deleted file mode 100644 index 7b49f06..0000000 Binary files a/src/win/cantidades/cuatro.bmp and /dev/null differ diff --git a/src/win/cantidades/dos.bmp b/src/win/cantidades/dos.bmp deleted file mode 100644 index a83fc33..0000000 Binary files a/src/win/cantidades/dos.bmp and /dev/null differ diff --git a/src/win/cantidades/jugador0.bmp b/src/win/cantidades/jugador0.bmp deleted file mode 100644 index ddb9a3d..0000000 Binary files a/src/win/cantidades/jugador0.bmp and /dev/null differ diff --git a/src/win/cantidades/jugador1.bmp b/src/win/cantidades/jugador1.bmp deleted file mode 100644 index c2c69b0..0000000 Binary files a/src/win/cantidades/jugador1.bmp and /dev/null differ diff --git a/src/win/cantidades/jugador2.bmp b/src/win/cantidades/jugador2.bmp deleted file mode 100644 index 66bcb87..0000000 Binary files a/src/win/cantidades/jugador2.bmp and /dev/null differ diff --git a/src/win/cantidades/jugador3.bmp b/src/win/cantidades/jugador3.bmp deleted file mode 100644 index 035efd2..0000000 Binary files a/src/win/cantidades/jugador3.bmp and /dev/null differ diff --git a/src/win/cantidades/seis.bmp b/src/win/cantidades/seis.bmp deleted file mode 100644 index 0e61240..0000000 Binary files a/src/win/cantidades/seis.bmp and /dev/null differ diff --git a/src/win/cantidades/siete.bmp b/src/win/cantidades/siete.bmp deleted file mode 100644 index 970f32f..0000000 Binary files a/src/win/cantidades/siete.bmp and /dev/null differ diff --git a/src/win/cantidades/tres.bmp b/src/win/cantidades/tres.bmp deleted file mode 100644 index b738943..0000000 Binary files a/src/win/cantidades/tres.bmp and /dev/null differ diff --git a/src/win/cantidades/uno.bmp b/src/win/cantidades/uno.bmp deleted file mode 100644 index e3f274f..0000000 Binary files a/src/win/cantidades/uno.bmp and /dev/null differ diff --git a/src/win/circulo.bmp b/src/win/circulo.bmp deleted file mode 100644 index bea09e3..0000000 Binary files a/src/win/circulo.bmp and /dev/null differ diff --git a/src/win/cpu.clp b/src/win/cpu.clp deleted file mode 100644 index 2ca9103..0000000 --- a/src/win/cpu.clp +++ /dev/null @@ -1,542 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;; -;; Estados de la CPU ;; -;;;;;;;;;;;;;;;;;;;;;;; - -;; Cambio de estado para busar la ficha más favorable -(defrule cambiar_estado0 - (declare (salience 25)) - ?e <- (estado CPU ?jugador) - => - (retract ?e) - (assert (estado MAXIMIZAR ?jugador) - (max -1 -1) - (elige -1 -1)) - ) - -;; Cambio de estado para poner la ficha elegida anteriormente -(defrule cambiar_estado1 - (declare (salience 25)) - ?e <- (estado MAXIMIZAR ?jugador) - => - (retract ?e) - (assert (estado PONER_CPU ?jugador)) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Reglas para buscar la ficha mejor valorada ;; -;; y borrar los valores ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; Eliminamos todas las marcas de las reglas -;; que valoran las fichas -(defrule eliminar_reglas - (declare (salience 40)) - ?r <- (disparo $?datos) - (estado MAXIMIZAR ?jugador) - => - (retract ?r) - ) - -;; Ponemos a cero todos los valores -(defrule poner_a_cero - (declare (salience 50)) - ?v <- (valor ?n ?valorh ?valort) - (estado MAXIMIZAR ?jugador) - (test (or (> ?valorh 0) (> ?valort 0))) - => - (retract ?v) - (assert (valor ?n 0 0)) - ) - -;; Eliminamos las valoraciones de fichas que no se pueden -;; colocar en la mesa -(defrule eliminar_valores_erroneos_HEAD - (declare (salience 200)) - (estado MAXIMIZAR ?jugador) - ?v <- (valor ?n ?valorh ?valort) - (ficha ?n ?x ?y) - (mesa ?head ?sentido $?resto) - (ficha ?head ?hx ?hy) - (test (not - (or - (and (= ?sentido 1) (or (= ?x ?hx) (= ?y ?hx))) - (and (= ?sentido 0) (or (= ?x ?hy) (= ?y ?hy))) - ) - )) - (test (> ?valorh 0)) - => - (retract ?v) - (assert (valor ?n 0 ?valort)) - ) - -(defrule eliminar_valores_erroneos_TAIL - (declare (salience 200)) - ?v <- (valor ?n ?valorh ?valort) - (estado MAXIMIZAR ?jugador) - (ficha ?n ?x ?y) - (mesa $?resto ?tail ?sentido) - (ficha ?tail ?tx ?ty) - (test (not - (or - (and (= ?sentido 1) (or (= ?x ?ty) (= ?y ?ty))) - (and (= ?sentido 0) (or (= ?x ?tx) (= ?y ?tx))) - ) - )) - (test (> ?valort 0)) - => - (retract ?v) - (assert (valor ?n ?valorh 0)) - ) - -;; Buscamos la ficha con el máximo valor -(defrule buscar_maximo_HEAD - (declare (salience 100)) - (estado MAXIMIZAR ?jugador) - ?v <- (valor ?n ?valorh ?valort) - ?m <- (max ?maxh ?maxt) - ?e <- (elige ?eligeh ?eliget) - (ficha ?n ?x ?y) -;; TODO: Solo para trazas -;; (test (>= ?valorh ?maxh)) - (test (> ?valorh 0)) - => - (if (>= ?valorh ?maxh) then - (retract ?v ?m ?e) - (assert (valor ?n 0 ?valort) - (max ?valorh ?maxt) - (elige ?n ?eliget)) - ) - (printout t " =====> Ficha_head: " - ?x "·" ?y " " ?valorh crlf) - ) - -(defrule buscar_maximo_TAIL - (declare (salience 100)) - (estado MAXIMIZAR ?jugador) - ?v <- (valor ?n ?valorh ?valort) - ?m <- (max ?maxh ?maxt) - ?e <- (elige ?eligeh ?eliget) - (ficha ?n ?x ?y) -;; TODO: Solo para trazas -;; (test (> ?valort ?maxt)) - (test (> ?valort 0)) - => - (if (> ?valort ?maxt) then - (retract ?v ?m ?e) - (assert (valor ?n ?valorh 0) - (max ?maxh ?valort) - (elige ?eligeh ?n)) - ) - (printout t " =====> Ficha_tail: " - ?x "·" ?y " " ?valort crlf) - ) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Regla para indicar cual es la ficha elegida ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; No hemos encontrado ninguna ficha -(defrule indicar_que_pasa - (declare (salience 200)) - ?e <- (estado PONER_CPU ?jugador) - ?m <- (max -1 -1) - ?l <- (elige -1 -1) - (tirada ?tirada) - => - (retract ?e ?m ?l) - (assert - (estado PONER_FICHA ?jugador) - (pasar ?jugador) - ) - ) - -;; Pone la primera ficha -(defrule indicar_ficha_primera - (declare (salience 100)) - ?e <- (estado PONER_CPU ?jugador) - ?m <- (max ?maxh ?maxt) - ?l <- (elige ?eligeh ?eliget) - (tirada 0) - (ficha ?eligeh ?hx ?hy) - (ficha ?eliget ?tx ?ty) - (mesa) - => - (bind ?px ?tx) - (bind ?py ?ty) - (if (> ?maxh ?maxt) then - (bind ?px ?hx) - (bind ?py ?hy) - ) - (retract ?e ?m ?l) - (assert - (estado PONER_FICHA ?jugador) - (poner ?px ?py) - ) - ) - -;; Pone una ficha -(defrule indicar_ficha_CPU_HEAD - (declare (salience 100)) - ?e <- (estado PONER_CPU ?jugador) - ?m <- (max ?maxh ?maxt) - ?l <- (elige ?eligeh ?eliget) - (tirada ?tirada) - (test (>= ?maxh ?maxt)) - (ficha ?eligeh ?x ?y) - (mesa ?head ?sentido $?resto) - (ficha ?head ?fx ?fy) - (test (or - (and (= ?sentido 1) (or (= ?y ?fx) (= ?x ?fx))) - (and (= ?sentido 0) (or (= ?y ?fy) (= ?x ?fy))) - )) - => - (bind ?px ?x) - (bind ?py ?y) - (if (or - (and (= ?sentido 1) (= ?x ?fx)) - (and (= ?sentido 0) (= ?x ?fy))) then - (bind ?px ?y) - (bind ?py ?x) - ) - (retract ?e ?m ?l) - (assert - (purga TAIL) - (estado PONER_FICHA ?jugador) - (poner ?px ?py) - ) - ) - -(defrule indicar_ficha_CPU_TAIL - (declare (salience 100)) - ?e <- (estado PONER_CPU ?jugador) - ?m <- (max ?maxh ?maxt) - ?l <- (elige ?eligeh ?eliget) - (tirada ?tirada) - (test (> ?maxt ?maxh)) - (ficha ?eliget ?x ?y) - (mesa $?resto ?tail ?sentido) - (ficha ?tail ?fx ?fy) - (test (or - (and (= ?sentido 1) (or (= ?y ?fy) (= ?x ?fy))) - (and (= ?sentido 0) (or (= ?y ?fx) (= ?x ?fx))) - )) - => - (bind ?px ?x) - (bind ?py ?y) - (if (or - (and (= ?sentido 1) (= ?y ?fy)) - (and (= ?sentido 0) (= ?y ?fx))) then - (bind ?px ?y) - (bind ?py ?x) - ) - (retract ?e ?m ?l) - (assert - (purga HEAD) - (estado PONER_FICHA ?jugador) - (poner ?px ?py) - ) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Reglas parar poner fichas al azar ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; La primera ficha será la de mayor valor -(defrule valorar_ficha_primera - (declare (salience 50)) - (estado CPU ?jugador) - ?m <- (mesa) - ?j <- (jugador (n ?jugador) (tipo CPU) - (fichas $?fichas1 ?ficha $?fichas2)) - ?f <- (ficha ?ficha ?fx ?fy) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists (disparo ?ficha valorar_ficha_primera))) - => - (retract ?v) - (assert (valor ?ficha - (+ ?valorh (+ ?fx ?fy 1)) - (+ ?valort (+ ?fx ?fy 1))) - (disparo ?ficha valorar_ficha_primera)) - ) - -;; Valoramos las fichas dando mayor preferencia -;; a las más grandes -(defrule valorar_ficha_HEAD - (declare (salience 50)) - (estado CPU ?jugador) - ?m <- (mesa ?head ?sentido $?resto) - ?j <- (jugador (n ?jugador) (tipo CPU) - (fichas $?fichas1 ?ficha $?fichas2)) - ?f <- (ficha ?ficha ?fx ?fy) - (ficha ?head ?hx ?hy) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists (disparo ?ficha valorar_ficha_HEAD))) - ;; La ficha debe poderse encadenar con la que está en la mesa - (test (or - (and (= ?sentido 1) (or (= ?fx ?hx) (= ?fy ?hx))) - (and (= ?sentido 0) (or (= ?fx ?hy) (= ?fy ?hy))) - )) - => - (bind ?s 1) - (if (or - (and (= ?sentido 1) (= ?fx ?hx)) - (and (= ?sentido 0) (= ?fx ?hy))) then - (bind ?s 0) - ) - (retract ?v) - (assert (valor ?ficha (+ ?valorh (+ ?fx ?fy 1)) ?valort) - (disparo ?ficha valorar_ficha_HEAD)) - ) - -(defrule valorar_ficha_TAIL - (declare (salience 50)) - (estado CPU ?jugador) - ?m <- (mesa $?resto ?tail ?sentido) - ?j <- (jugador (n ?jugador) (tipo CPU) - (fichas $?fichas1 ?ficha $?fichas2)) - ?f <- (ficha ?ficha ?fx ?fy) - (ficha ?tail ?tx ?ty) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists (disparo ?ficha valorar_ficha_TAIL))) - ;; La ficha debe poderse encadenar con la que está en la cola de la mesa - (test (or - (and (= ?sentido 1) (or (= ?fx ?ty) (= ?fy ?ty))) - (and (= ?sentido 0) (or (= ?fx ?tx) (= ?fy ?tx))) - )) - => - (bind ?s 1) - (if (or - (and (= ?sentido 1) (= ?fy ?ty)) - (and (= ?sentido 0) (= ?fy ?tx))) then - (bind ?s 0) - ) - (retract ?v) - (assert (valor ?ficha ?valorh (+ ?valort (+ ?fx ?fy 1))) - (disparo ?ficha valorar_ficha_TAIL)) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Reglas extra, a parte de los refranes ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; las metemos todas en tiene -(defrule averiguar_que_puede_tener1 - (declare (salience 200)) - (estado CPU ?yo) - ?bla <- (jugador (n ?jugador) (tipo ?tipo) - (tiene $?tiene) (abre $?abre) - (pasa $?pasa) (fichas $?fichas) - (puso $?puso) (palos $?palos)) - (test (<> ?yo ?jugador)) - (not (exists (disparo averiguar1 ?jugador))) - => - (retract ?bla) - (assert (jugador (n ?jugador) - (tiene 1 1 1 1 1 1 1) - (abre $?abre) - (pasa $?pasa) - (fichas $?fichas) - (puso $?puso) - (tipo ?tipo) - (palos $?palos) - ) - (disparo averiguar1 ?jugador) - ) - ) - -;; quitamos de la lista si ha pasado al tener que lanzar ese numero -(defrule averiguar_que_puede_tener2 - (declare (salience 180)) - (estado CPU ?yo) - ?bla <- (jugador (n ?jugador) (tiene $?tiene) - (abre $?abre) - (pasa $?pasa1 ?pasa $?pasa2) - (fichas $?fichas) - (puso $?puso) - (tipo ?tipo) - (palos $?palos) - ) - (test (<> ?yo ?jugador)) - (not (exists (disparo averiguar2 ?jugador ?pasa))) - => - (retract ?bla) - (bind $?tiene (replace$ $?tiene (+ ?pasa 1) (+ ?pasa 1) 0)) - (assert (jugador (n ?jugador) - (tiene $?tiene) - (abre $?abre) - (pasa $?pasa) - (fichas $?fichas) - (puso $?puso) - (tipo ?tipo) - (palos $?palos) - )) - (assert (disparo averiguar2 ?jugador ?pasa)) - ) - -;; quitamos de la lista aquellas que ya están en la mesa o tengo yo -(defrule averiguar_que_puede_tener4 - (declare (salience 170)) - (estado CPU ?yo) - (jugador (n ?yo) (palos $?palos1 ?palo $?palos2)) - ?bla <- (jugador (n ?jugador) - (tiene $?tiene) - (abre $?abre) - (pasa $?pasa) - (fichas $?fichas) - (puso $?puso) - (tipo ?tipo) - (palos $?palos) - ) - (cierre $?cierre1 ?cierre $?cierre2) - ;; Esto produce que se equivoque cuando - ;; tiene una ficha doble, ya que la cuenta - ;; dos veces y produce cierre en ocasiones - ;; en las que no toca - (test (>= (+ ?cierre ?palo) 7)) - (test (<> ?yo ?jugador)) - (ficha ?numero ?x ?y) - (test (= ?numero (length$ $?cierre1))) - (test (= ?numero (length$ $?palos1))) - (not (exists (disparo averiguar4 ?jugador ?numero))) - => - (retract ?bla) - (bind $?tiene (replace$ $?tiene - (+ ?numero 1) - (+ ?numero 1) 0)) - (assert (jugador (n ?jugador) - (tiene $?tiene) - (abre $?abre) - (pasa $?pasa) - (fichas $?fichas) - (puso $?puso) - (tipo ?tipo) - (palos $?palos) - )) - (assert (disparo averiguar4 ?jugador ?numero)) - ) - -;; dar mas prioridad a las que ha abierto -(defrule averiguar_que_puede_tener3 - (declare (salience 190)) - (estado CPU ?yo) - ?bla <- (jugador (n ?jugador) - (tiene $?tiene) - (abre $?abre1 ?abre $?abre2) - (pasa $?pasa) - (fichas $?fichas) - (puso $?puso) - (tipo ?tipo) - (palos $?palos) - ) - (test (<> ?yo ?jugador)) - (not (exists (disparo averiguar3 ?jugador ?abre))) - => - (retract ?bla) - (bind $?tiene (replace$ $?tiene - (+ ?abre 1) (+ ?abre 1) - (+ (nth$ (+ ?abre 1) $?tiene) 1))) - (assert (jugador (n ?jugador) (tiene $?tiene) - (abre $?abre1 ?abre $?abre2) - (pasa $?pasa) (fichas $?fichas) - (puso $?puso) (tipo ?tipo) - (palos $?palos) - )) - (assert (disparo averiguar3 ?jugador ?abre)) - ) - -;; Valoramos mejor las fichas que tenemos repetidas -(defrule cuenta_repetidas_X - (declare (salience 30)) - (estado CPU ?jugador) - (ficha ?una ?rep ?y) - ?v <- (valor ?una ?valorh ?valort) - (jugador (n ?jugador) (fichas $?dummy1 ?una $?dummy2) - (palos $?palos1 ?palo $?palos2)) - (test (= ?rep (length$ $?palos1))) - (mesa ?head ?sh $?resto ?tail ?st) - (ficha ?head ?hx ?hy) - (ficha ?tail ?tx ?ty) - (test - (or - (or - (and (= ?sh 1) (= ?y ?hx)) - (and (= ?sh 0) (= ?y ?hy)) - ) - (or - (and (= ?st 1) (= ?y ?ty)) - (and (= ?st 0) (= ?y ?tx)) - ) - ) - ) - (not (exists (disparo cuenta_repetidas_X ?una ?rep))) - => - (bind ?addh 0) - (bind ?addt 0) - (if (or - (and (= ?sh 1) (= ?y ?hx)) - (and (= ?sh 0) (= ?y ?hy))) then (bind ?addh 3) - ) - (if (or - (and (= ?st 1) (= ?y ?ty)) - (and (= ?st 0) (= ?y ?tx))) then (bind ?addt 3) - ) - - (retract ?v) - (assert - (valor ?una (+ ?valorh ?addh) (+ ?valort ?addt)) - (disparo cuenta_repetidas_X ?una ?rep) - ) - ) - -(defrule cuenta_repetidas_Y - (declare (salience 30)) - (estado CPU ?jugador) - (ficha ?una ?x ?rep) - ?v <- (valor ?una ?valorh ?valort) - (jugador (n ?jugador) (fichas $?dummy1 ?una $?dummy2) - (palos $?palos1 ?palo $?palos2)) - (test (= ?rep (length$ $?palos1))) - (mesa ?head ?sh $?resto ?tail ?st) - (ficha ?head ?hx ?hy) - (ficha ?tail ?tx ?ty) - (test - (or - (or - (and (= ?sh 1) (= ?x ?hx)) - (and (= ?sh 0) (= ?x ?hy)) - ) - (or - (and (= ?st 1) (= ?x ?ty)) - (and (= ?st 0) (= ?x ?tx)) - ) - ) - ) - (not (exists (disparo cuenta_repetidas_Y ?una ?rep))) - => - (bind ?addh 0) - (bind ?addt 0) - (if (or - (and (= ?sh 1) (= ?x ?hx)) - (and (= ?sh 0) (= ?x ?hy))) then (bind ?addh 3) - ) - (if (or - (and (= ?st 1) (= ?x ?ty)) - (and (= ?st 0) (= ?x ?tx))) then (bind ?addt 3) - ) - (retract ?v) - (assert - (valor ?una (+ ?valorh ?addh) (+ ?valort ?addt)) - (disparo cuenta_repetidas_Y ?una ?rep) - ) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/src/win/domino.exe b/src/win/domino.exe deleted file mode 100644 index 7cfa754..0000000 Binary files a/src/win/domino.exe and /dev/null differ diff --git a/src/win/domino2.clp b/src/win/domino2.clp deleted file mode 100644 index c74fa65..0000000 --- a/src/win/domino2.clp +++ /dev/null @@ -1,999 +0,0 @@ -;; TODO: Al inferir las fichas que puede tener un jugador -;; hay que comprobar que el jugador que juega en ese momento -;; no tiene dobles, pues si tiene un doble, el conteo no para -;; cierre no es correcto :P - -;; En la mesa, si sentido es 1, está al derecho, -;; si no al revés - -(defglobal ?*texto* = 0) -(defglobal ?*numj* = 4) -(defglobal ?*MSG_BASE* = 0) -(defglobal ?*MSG_COLOCAR* = 1) -(defglobal ?*MSG_PONER* = 2) -(defglobal ?*MSG_ESCOGE* = 3) -(defglobal ?*MSG_GANA0* = 4) -(defglobal ?*MSG_GANA1* = 5) -(defglobal ?*MSG_GANA2* = 6) -(defglobal ?*MSG_GANA3* = 7) -(defglobal ?*MSG_NADIE* = 8) -(defglobal ?*MSG_PASA0* = 9) -(defglobal ?*MSG_PASA1* = 10) -(defglobal ?*MSG_PASA2* = 11) -(defglobal ?*MSG_PASA3* = 12) -(defglobal ?*MSG_TIPO* = 13) -(defglobal ?*MSG_TURNO0* = 14) -(defglobal ?*MSG_TURNO1* = 15) -(defglobal ?*MSG_TURNO2* = 16) -(defglobal ?*MSG_TURNO3* = 17) - - -(deffunction acabar() - (halt) - ) - -;; Template para definir los atributos de cada jugador -;; Vendría a ser nuestra representación del frame :) -(deftemplate - jugador - (slot n (type INTEGER)) ;; Id del jugador - (slot tipo (type SYMBOL)) ;; Tipo de jugador - (multislot fichas (type INTEGER)) ;; Fichas que tiene - (multislot tiene (type INTEGER)) ;; Palos que puede tener - (multislot pasa (type INTEGER)) ;; Palos que ha pasado - (multislot puso (type INTEGER)) ;; Palos que ha puesto en mesa - (multislot abre (type INTEGER)) ;; Palo que deja abierto - (multislot palos (type INTEGER)) ;; Palos que tiene - ) - -;; Valores herísticos que le damos a cada ficha -;; (valor *num_ficha *valor_head *valor_tail) -;; *valor_head: indica el beneficio de ponerla en la cabeza -;; *valor_tail: indica el beneficio de ponerla en la cola -(deffacts valores - (valor 0 0 0) - (valor 1 0 0) - (valor 2 0 0) - (valor 3 0 0) - (valor 4 0 0) - (valor 5 0 0) - (valor 6 0 0) - (valor 7 0 0) - (valor 8 0 0) - (valor 9 0 0) - (valor 10 0 0) - (valor 11 0 0) - (valor 12 0 0) - (valor 13 0 0) - (valor 14 0 0) - (valor 15 0 0) - (valor 16 0 0) - (valor 17 0 0) - (valor 18 0 0) - (valor 19 0 0) - (valor 20 0 0) - (valor 21 0 0) - (valor 22 0 0) - (valor 23 0 0) - (valor 24 0 0) - (valor 25 0 0) - (valor 26 0 0) - (valor 27 0 0) - ) - -;; Fichas, ordenadas de menor a mayor valor -(deffacts fichas - ;; Parar repartir las fichas al principio - (repartir 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 - 20 21 22 23 24 25 26 27) - (ficha 0 0 0) - (ficha 1 0 1) - (ficha 2 0 2) - (ficha 3 0 3) - (ficha 4 0 4) - (ficha 5 0 5) - (ficha 6 0 6) - (ficha 7 1 1) - (ficha 8 1 2) - (ficha 9 1 3) - (ficha 10 1 4) - (ficha 11 1 5) - (ficha 12 1 6) - (ficha 13 2 2) - (ficha 14 2 3) - (ficha 15 2 4) - (ficha 16 2 5) - (ficha 17 2 6) - (ficha 18 3 3) - (ficha 19 3 4) - (ficha 20 3 5) - (ficha 21 3 6) - (ficha 22 4 4) - (ficha 23 4 5) - (ficha 24 4 6) - (ficha 25 5 5) - (ficha 26 5 6) - (ficha 27 6 6) - ) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Indica si un jugador es rival de otro ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(deffunction es_rival(?jugador ?otro) - (bind ?ret - (or - (= ?otro (mod (+ ?jugador 1) 4)) - (= ?otro (mod (+ ?jugador 3) 4)) - ) - ) - ?ret - ) - -;; Estado del juego en el comienzo -(deffacts juego - ;; (estado REPARTIR) -;; (mano 0) - ;; (mesa) - (tirada 0) - ;; Indica cuantas veces seguidas han pasado - ;; los jugadores - (han_pasado 0) - (dobles_mesa 0 0 0 0 0 0 0) - ;; (cierre 0 0 0 0 0 0 0) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Regla para repartir las fichas a cada jugador ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; Repartimos las fichas al azar -(defrule repartir_fichas - (declare (salience 50)) - ?r<- (repartir $?resto) - ?j<- (jugador - (n ?n) - (tipo ?tipo) - (fichas $?fichas) - (tiene) - (pasa) - (puso) - (abre) - (palos $?palos) - ) - ?e<- (estado REPARTIR) - ?rand<- (MI_RANDOM ?una) - (test (< (length$ $?fichas) 7)) - (ficha ?f ?x ?y) - (test (= ?f (nth$ ?una $?resto))) - => - (bind $?palos (replace$ $?palos (+ ?x 1) (+ ?x 1) - (+ (nth$ (+ ?x 1) $?palos) 1))) - (bind $?palos (replace$ $?palos (+ ?y 1) (+ ?y 1) - (+ (nth$ (+ ?y 1) $?palos) 1))) - (retract ?j ?r ?rand) - (assert - (jugador - (n ?n) - (tipo ?tipo) - (fichas $?fichas (nth$ ?una $?resto)) - (tiene) - (pasa) - (puso) - (abre) - (palos $?palos) - ) - (repartir (delete$ $?resto ?una ?una)) - ) - ) - -(defrule mi_random - (declare (salience 55)) - ?r <- (repartir $?resto) - (test (> (length$ $?resto) 0)) - (estado REPARTIR) - => - (assert (MI_RANDOM (random 1 (length$ $?resto)))) - ) - -(defrule repartir_cambio_estado - (declare (salience 40)) - (repartir) - (mano ?mano) - ?e <- (estado REPARTIR) - => - (retract ?e) - (assert (estado TURNO ?mano)) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;;;;;;;;;;;;;;;;;;;;;;; -;; FINAL DE LA PARTIDA ;; -;;;;;;;;;;;;;;;;;;;;;;;;; -(defrule 4pasos_seguidos - (declare (salience 4000)) - (han_pasado 4) - (jugador (n ?yo)(palos $?palos1)) - (jugador (n ?uno)(palos $?palos2)) - (jugador (n ?compi)(palos $?palos3)) - (jugador (n ?otro)(palos $?palos4)) - (test (and - (es_rival ?uno ?yo) - (es_rival ?otro ?yo) - (<> ?uno ?otro ?yo) - (not (es_rival ?compi ?yo)) - (<> ?yo ?compi) - ) - ) - => - (C_msg ?*MSG_NADIE*) - (printout t "Ningún jugador puede poner más fichas!!" crlf) - (printout t "Puntos de cada jugador: " crlf) - (bind ?i 1) - (bind ?puntos 0) - (while (<= ?i (length$ $?palos1)) do - (bind ?puntos (+ ?puntos (* (nth$ ?i $?palos1) (- ?i 1)))) - (bind ?i (+ ?i 1)) - ) - (printout t tab "Jugador " ?yo ": " ?puntos - " " $?palos1 crlf) - (bind ?i 1) - (bind ?puntos 0) - (while (<= ?i (length$ $?palos2)) do - (bind ?puntos (+ ?puntos (* (nth$ ?i $?palos2) (- ?i 1)))) - (bind ?i (+ ?i 1)) - ) - (printout t tab "Jugador " ?uno ": " ?puntos - " " $?palos2 crlf) - (bind ?i 1) - (bind ?puntos 0) - (while (<= ?i (length$ $?palos3)) do - (bind ?puntos (+ ?puntos (* (nth$ ?i $?palos3) (- ?i 1)))) - (bind ?i (+ ?i 1)) - ) - (printout t tab "Jugador " ?compi ": " ?puntos - " " $?palos3 crlf) - (bind ?i 1) - (bind ?puntos 0) - (while (<= ?i (length$ $?palos4)) do - (bind ?puntos (+ ?puntos (* (nth$ ?i $?palos4) (- ?i 1)))) - (bind ?i (+ ?i 1)) - ) - (printout t tab "Jugador " ?otro ": " ?puntos - " " $?palos4 crlf) - (C_mostrar_mesa) - (C_flip) - (C_sdl_cerrar) - (acabar) - ) - -(defrule gana_jugador - (declare (salience 4000)) - (not (exists (estado REPARTIR))) - (jugador (n ?yo)(tipo ?tipo)(fichas)(palos $?palos1)) - (jugador (n ?uno)(palos $?palos2)) - (jugador (n ?compi)(palos $?palos3)) - (jugador (n ?otro)(palos $?palos4)) - (test (and - (es_rival ?uno ?yo) - (es_rival ?otro ?yo) - (<> ?uno ?otro ?yo) - (not (es_rival ?compi ?yo)) - (<> ?yo ?compi) - ) - ) - => - (C_msg (+ ?*MSG_GANA0* ?yo)) - (printout t "Ha ganado el jugador: " ?yo crlf) - (printout t "Puntos de cada jugador: " crlf) - (bind ?i 1) - (bind ?puntos 0) - (while (<= ?i (length$ $?palos1)) do - (bind ?puntos (+ ?puntos (* (nth$ ?i $?palos1) (- ?i 1)))) - (bind ?i (+ ?i 1)) - ) - (printout t tab "Jugador " ?yo ": " ?puntos - " " $?palos1 crlf) - (bind ?i 1) - (bind ?puntos 0) - (while (<= ?i (length$ $?palos2)) do - (bind ?puntos (+ ?puntos (* (nth$ ?i $?palos2) (- ?i 1)))) - (bind ?i (+ ?i 1)) - ) - (printout t tab "Jugador " ?uno ": " ?puntos - " " $?palos2 crlf) - (bind ?i 1) - (bind ?puntos 0) - (while (<= ?i (length$ $?palos3)) do - (bind ?puntos (+ ?puntos (* (nth$ ?i $?palos3) (- ?i 1)))) - (bind ?i (+ ?i 1)) - ) - (printout t tab "Jugador " ?compi ": " ?puntos - " " $?palos3 crlf) - (bind ?i 1) - (bind ?puntos 0) - (while (<= ?i (length$ $?palos4)) do - (bind ?puntos (+ ?puntos (* (nth$ ?i $?palos4) (- ?i 1)))) - (bind ?i (+ ?i 1)) - ) - (printout t tab "Jugador " ?otro ": " ?puntos - " " $?palos4 crlf) - - (C_mostrar_mesa) - (C_flip) - (C_sdl_cerrar) - (acabar) - ) -;;;;;;;;;;;;;;;;;;;;;;;; - -;; Eliminamos los hechos que limitan poner la ficha -;; en la cabeza o la cola de la mesa -(defrule eliminar_purga - (declare (salience 10000)) - (estado TURNO ?jugador) - ?p <- (purga ?WOP) - => - (retract ?p) - ) - -;; Paso al siguiente jugador -(defrule sig_jugador - (declare (salience 100)) - ?e <- (estado SIG_JUGADOR ?jugador) - => - (retract ?e) - (assert (estado TURNO (mod (+ ?jugador 1) ?*numj*))) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; Mostramos las fichas de la mesa -(defrule turno - (declare (salience 6000)) - (estado TURNO ?jugador) - => - (C_msg (+ ?*MSG_TURNO0* ?jugador) 50) - (printout t "=> Turno para el jugador '" ?jugador "'" crlf) - (printout t "Estado de la mesa: ") - (C_flip) - (C_msg (+ ?*MSG_TURNO0* ?jugador) -1) - ) - -(defrule mostrar_tablero - (declare (salience 5500)) - (estado TURNO ?jugador) - (mesa $?fichas1 ?ficha ?sentido $?fichas2) - (test (= (mod (length$ $?fichas1) 2) 0)) - (ficha ?ficha ?x ?y) - => - (if (= ?sentido 1) then - (printout t ?x "·" ?y " ") - else (printout t ?y "·" ?x " ") - ) - ) - -(defrule mostrar_tablero_crlf - (declare (salience 5250)) - (estado TURNO ?jugador) - (mesa $?fichas) - (jugador (n ?jugador) (tipo ?tipo)) - => -;;;; (C_dibujar_mesa) - (printout t crlf) - (C_mostrar_mesa) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Regla para ceder el control o tomarlo ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; Control para la CPU -(defrule control_cpu - (declare (salience 5000)) - ?e<- (estado TURNO ?jugador) - (jugador (n ?jugador) (tipo CPU)) - => - (retract ?e) - (assert (estado CPU ?jugador)) - (C_flip) - ) - -;; Control para el usuario -(defrule ceder_control - (declare (salience 5000)) - ?e<- (estado TURNO ?jugador) - (jugador (n ?jugador) (tipo HUMANO)) - => - (retract ?e) - (assert (estado USUARIO ?jugador)) - (printout t "Tus fichas: ") - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Mostramos las fichas del usuario ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(defrule mostrar_fichas_crlf - (declare (salience 4000)) - (estado USUARIO ?jugador) - => - (printout t crlf) - (C_flip) - ) - -(defrule mostrar_fichas - (declare (salience 5000)) - (estado USUARIO ?jugador) - (jugador (n ?jugador) (fichas $?dummy1 ?ficha $?dummy2)) - (ficha ?ficha ?x ?y) - => - (printout t ?x "·" ?y " | ") - (C_ficha_jugador ?ficha) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;;;;;;;;;;;;;;;;;;;;;;;; -;; El jugador ha pasado ;; -;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; Si un jugador pasa, se anota en su atributo -;; los valores de las puertas para los cuales -;; no ha podido poner ficha. -;; También incrementamos en 1 (han_pasado ?n) -(defrule pasar_tirada - (declare (salience 1000)) - ?e <- (estado ?WOP ?jugador) - ?p <- (pasar ?jugador) - ?h <- (han_pasado ?pasan) - (mesa ?head ?sh $?dummy ?tail ?st) - (ficha ?head ?fhx ?fhy) - (ficha ?tail ?ftx ?fty) - ?j <- (jugador - (n ?jugador) (tipo ?tipo) - (fichas $?fichas) - (tiene $?tiene) - (pasa $?pasa) - (puso $?puso) - (abre $?abre) - (palos $?palos) - ) - ?t <- (tirada ?tirada) - => - (bind ?ph ?fhx) - (bind ?pt ?fty) - (if (= ?sh 0) then (bind ?ph ?fhy)) - (if (= ?st 0) then (bind ?pt ?ftx)) - - (retract ?e ?p ?j ?t ?h) - (assert - (han_pasado (+ ?pasan 1)) - (tirada (+ ?tirada 1)) - (estado SIG_JUGADOR ?jugador) - (jugador - (n ?jugador) (tipo ?tipo) - (fichas $?fichas) - (tiene $?tiene) - (pasa $?pasa ?ph ?pt) - (puso $?puso) - (abre $?abre) - (palos $?palos) - ) - ) - (C_msg (+ ?*MSG_PASA0* ?jugador) 75) - (printout t "El jugador '" ?jugador "' ha pasado!!" crlf) - (C_flip) - ) - -;; Si pasa en la segunda tirada, tendrá un tratamiento -;; especial para que el LHS se cumpla -(defrule pasar_tirada_segunda - (declare (salience 1100)) - ?e <- (estado $?WOP) - ?p <- (pasar ?jugador) - (mesa ?head ?sh) - (ficha ?head ?fhx ?fhy) - ?j <- (jugador - (n ?jugador) (tipo ?tipo) - (fichas $?fichas) - (tiene $?tiene) - (pasa $?pasa) - (puso $?puso) - (abre $?abre) - (palos $?palos) - ) - ?t <- (tirada ?tirada) - ?h <- (han_pasado ?pasan) - => - (retract ?e ?p ?j ?t ?h) - (assert - (han_pasado (+ ?pasan 1)) - (tirada (+ ?tirada 1)) - (estado SIG_JUGADOR ?jugador) - (jugador - (n ?jugador) (tipo ?tipo) - (fichas $?fichas) - (tiene $?tiene) - (pasa $?pasa ?fhx ?fhy) - (puso $?puso) - (abre $?abre) - (palos $?palos) - ) - ) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Ponemos la ficha elegida ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; Indica que ficha es la que se va a poner, y la posición -(defrule voy_a_poner - (declare (salience 300)) - (estado PONER_FICHA ?jugador) - (poner ?x ?y) - => - (printout t "El jugador '" ?jugador "' va a poner: " - ?x "·" ?y crlf) - ) - -;; La ficha no se ha podido colocar -(defrule error_colocar_ficha - (declare (salience 100)) - ?e <- (estado PONER_FICHA ?jugador) - ?p <- (poner ?x ?y) - => - (C_msg ?*MSG_COLOCAR* 75) - (printout t "Error al colocar la ficha!!!: " - ?x "·" ?y crlf) - (retract ?e ?p) - (assert (estado TURNO ?jugador)) - (C_flip) - ) - -;; Si es la primera ficha, necesita un tratamiento -;; especial para que el LHS se cumpla -(defrule poner_primera_ficha - (declare (salience 250)) - ?t <- (tirada 0) - ?e <- (estado PONER_FICHA ?jugador) - ?p <- (poner ?x ?y) - ?c <- (cierre $?cierre) - (ficha ?ficha ?fx ?fy) - (test (or - (and (= ?x ?fx) (= ?y ?fy)) - (and (= ?x ?fy) (= ?y ?fx)) - )) - ?m <- (mesa) - ?j <- (jugador (n ?jugador) (tipo ?tipo) - (fichas $?fichas1 ?ficha $?fichas2) - (tiene $?tiene) (pasa $?pasa) (puso $?puso) - (abre $?abre) - (palos $?palos) - ) - ?h <- (han_pasado ?pasan) - ?d <- (dobles_mesa $?dobles) - => - (C_fichas ?jugador (+ (length$ $?fichas1) (length$ $?fichas2))) - (bind ?s 1) - (if (= ?y ?fx) then (bind ?s 0)) - (retract ?t ?e ?p ?m ?j ?h ?c ?d) - (bind $?cierre (replace$ $?cierre (+ ?x 1) (+ ?x 1) - (+ (nth$ (+ ?x 1) $?cierre) 1))) - (if (<> ?x ?y) then - (bind $?cierre (replace$ $?cierre (+ ?y 1) (+ ?y 1) - (+ (nth$ (+ ?y 1) $?cierre) 1))) - ) - - (bind $?palos (replace$ $?palos (+ ?x 1) (+ ?x 1) - (- (nth$ (+ ?x 1) $?palos) 1))) - (bind $?palos (replace$ $?palos (+ ?y 1) (+ ?y 1) - (- (nth$ (+ ?y 1) $?palos) 1))) - - (if (= ?x ?y) then - (bind $?dobles (replace$ $?dobles (+ ?x 1) (+ ?x 1) 1)) - ) - - (assert - (dobles_mesa $?dobles) - (han_pasado 0) - (tirada 1) - (estado SIG_JUGADOR ?jugador) - (mesa ?ficha ?s) - (cierre $?cierre) - (jugador - (n ?jugador) (tipo ?tipo) - (fichas $?fichas1 $?fichas2) - (tiene $?tiene) - (pasa $?pasa) - (puso $?puso ?ficha) - (abre $?abre ?x ?y) - (palos $?palos) - ) - ) - (C_ficha_mesa ?ficha ?s 0) - ) - -;; Ponemos una ficha en la cabeza de la mesa -;; si no se ha bloqueado esta acción con una purga -(defrule poner_ficha_elegida_HEAD - (declare (salience 200)) - ?t <- (tirada ?tirada) - ?e <- (estado PONER_FICHA ?jugador) - ?p <- (poner ?x ?y) - (ficha ?ficha ?fx ?fy) - ?c <- (cierre $?cierre) - ;; La ficha debe existir - (test (or - (and (= ?x ?fx) (= ?y ?fy)) - (and (= ?x ?fy) (= ?y ?fx)) - )) - ?m <- (mesa ?head ?sentido $?fichas) - (ficha ?head ?hx ?hy) - ;; Según el sentido de la primera ficha en la mesa - ;; indicaremos si se puede o no poner la ficha - (test (or - (and (= ?sentido 1) (= ?hx ?y)) - (and (= ?sentido 0) (= ?hy ?y)) - )) - ;; Fichas del jugador, debemos eliminar la que ponemos - ?j <- (jugador (n ?jugador) (tipo ?tipo) - (fichas $?fichas1 ?ficha $?fichas2) - (tiene $?tiene) (pasa $?pasa) - (puso $?puso) (abre $?abre) - (palos $?palos) - ) - ;; no exists Purga - (not (exists (purga HEAD))) - ?h <- (han_pasado ?pasan) - ?d <- (dobles_mesa $?dobles) - => - (C_fichas ?jugador (+ (length$ $?fichas1) (length$ $?fichas2))) - (bind ?abrio ?fx) - (bind ?s 1) - (if (= ?y ?fx) then (bind ?s 0) (bind ?abrio ?fy)) - (retract ?t ?e ?p ?m ?j ?h ?c ?d) - (bind $?cierre (replace$ $?cierre (+ ?x 1) (+ ?x 1) - (+ (nth$ (+ ?x 1) $?cierre) 1))) - (if (<> ?x ?y) then - (bind $?cierre (replace$ $?cierre (+ ?y 1) (+ ?y 1) - (+ (nth$ (+ ?y 1) $?cierre) 1))) - ) - (bind $?palos (replace$ $?palos (+ ?x 1) (+ ?x 1) - (- (nth$ (+ ?x 1) $?palos) 1))) - (bind $?palos (replace$ $?palos (+ ?y 1) (+ ?y 1) - (- (nth$ (+ ?y 1) $?palos) 1))) - - (if (= ?x ?y) then - (bind $?dobles (replace$ $?dobles (+ ?x 1) (+ ?x 1) 1)) - ) - - (assert - (dobles_mesa $?dobles) - (han_pasado 0) - (tirada (+ ?tirada 1)) - (estado SIG_JUGADOR ?jugador) - (mesa ?ficha ?s ?head ?sentido $?fichas) - (cierre $?cierre) - (jugador - (n ?jugador) (tipo ?tipo) - (fichas $?fichas1 $?fichas2) - (tiene $?tiene) - (pasa $?pasa) - (puso $?puso ?ficha) - (abre $?abre ?abrio) - (palos $?palos) - ) - ) - (C_ficha_mesa ?ficha ?s 0) - ) - -;; Igual pero para la cola de la mesa -(defrule poner_ficha_elegida_TAIL - (declare (salience 200)) - ?t <- (tirada ?tirada) - ?e <- (estado PONER_FICHA ?jugador) - ?p <- (poner ?x ?y) - (ficha ?ficha ?fx ?fy) - ?c <- (cierre $?cierre) - (test (or - (and (= ?x ?fx) (= ?y ?fy)) - (and (= ?x ?fy) (= ?y ?fx)) - )) - ?m <- (mesa $?fichas ?tail ?sentido) - (ficha ?tail ?tx ?ty) - (test (or - (and (= ?sentido 1) (= ?ty ?x)) - (and (= ?sentido 0) (= ?tx ?x)) - )) - ?j <- (jugador (n ?jugador) (tipo ?tipo) - (fichas $?fichas1 ?ficha $?fichas2) - (tiene $?tiene) (pasa $?pasa) (puso $?puso) - (abre $?abre) - (palos $?palos) - ) - (not (exists (purga TAIL))) - ?h <- (han_pasado ?pasan) - ?d <- (dobles_mesa $?dobles) - => - (C_fichas ?jugador (+ (length$ $?fichas1) (length$ $?fichas2))) - (bind ?abrio ?fy) - (bind ?s 1) - (if (= ?y ?fx) then (bind ?s 0) (bind ?abrio ?fx)) - (retract ?t ?e ?p ?m ?j ?h ?c ?d) - (bind $?cierre (replace$ $?cierre (+ ?x 1) (+ ?x 1) - (+ (nth$ (+ ?x 1) $?cierre) 1))) - (if (<> ?x ?y) then - (bind $?cierre (replace$ $?cierre (+ ?y 1) (+ ?y 1) - (+ (nth$ (+ ?y 1) $?cierre) 1))) - ) - (bind $?palos (replace$ $?palos (+ ?x 1) (+ ?x 1) - (- (nth$ (+ ?x 1) $?palos) 1))) - (bind $?palos (replace$ $?palos (+ ?y 1) (+ ?y 1) - (- (nth$ (+ ?y 1) $?palos) 1))) - - (if (= ?x ?y) then - (bind $?dobles (replace$ $?dobles (+ ?x 1) (+ ?x 1) 1)) - ) - - (assert - (dobles_mesa $?dobles) - (han_pasado 0) - (tirada (+ ?tirada 1)) - (estado SIG_JUGADOR ?jugador) - (mesa $?fichas ?tail ?sentido ?ficha ?s) - (cierre $?cierre) - (jugador - (n ?jugador) (tipo ?tipo) - (fichas $?fichas1 $?fichas2) - (tiene $?tiene) - (pasa $?pasa) - (puso $?puso ?ficha) - (abre $?abre ?abrio) - (palos $?palos) - ) - ) - (C_ficha_mesa ?ficha ?s 1) - ) - -;; Si resulta que la ficha se puede poner de 2 formas distintas -;; se indicará y se preguntará en que posición se quiere poner -(defrule preguntar_lugar - (declare (salience 500)) - ?e <- (estado PONER_FICHA ?jugador) - ?p <- (poner ?x ?y) - (ficha ?ficha ?fx ?fy) - (test (or - (and (= ?x ?fx) (= ?y ?fy)) - (and (= ?x ?fy) (= ?y ?fx)) - )) - ?m <- (mesa ?head ?sentido $?fichas ?tail ?sentido) - (test (<> ?head ?tail)) - (ficha ?tail ?tx ?ty) - (ficha ?head ?hx ?hy) - (test (or - (and (= ?sentido 1) (= ?ty ?x)) - (and (= ?sentido 0) (= ?tx ?x)) - )) - (test (or - (and (= ?sentido 1) (= ?hx ?y)) - (and (= ?sentido 0) (= ?hy ?y)) - )) - (not (exists (purga ?WOP))) - ?j <- (jugador (n ?jugador) (tipo ?tipo) - (fichas $?fichas1 ?ficha $?fichas2) - (tiene $?tiene) (pasa $?pasa) (puso $?puso)) - => - (printout t "Ey, la ficha se puede poner de 2 formas," - "¿cual quieres (head tail)?: ") - (bind ?l (read)) - (if (eq ?l head) then (assert (purga TAIL)) - else (assert (purga HEAD)) - ) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Control para el usuario ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; El usuario ha puesto una ficha -(defrule poner_ficha_usuario - (declare (salience 100)) - ?p <- (poner ?x ?y) - ?e <- (estado USUARIO ?jugador) - => - (retract ?e) - (assert (estado PONER_FICHA ?jugador)) - ) - -;;;;;;;;;;;;; -;; ERRORES ;; -;;;;;;;;;;;;; - -;; La ficha no se puede poner -(defrule error - (declare (salience 10)) - ?p <- (poner ?x ?y) - ?e <- (estado USUARIO ?jugador) - => - (C_msg ?*MSG_PONER* 75) - (printout t "ERROR no puedes poner esa ficha: " - ?x "·" ?y crlf) - (retract ?p ?e) - (assert (estado TURNO ?jugador)) - (C_flip) - ) - -;; La ficha está en la mesa -(defrule error2 - (declare (salience 200)) - ?p <- (poner ?x ?y) - (mesa $?fichas1 ?ficha ?sentido $?fichas2) - (ficha ?n ?fx ?fy) - (test (= (mod (length$ $?fichas1) 2) 0)) - (test (= ?n ?ficha)) - (test (or - (and (= ?x ?fx) (= ?y ?fy)) - (and (= ?x ?fy) (= ?y ?fx)) - )) - ?e <- (estado USUARIO ?jugador) - => - (printout t "ERROR, esa ficha esta en la mesa: " - ?x "·" ?y crlf) - (retract ?p ?e) - (assert (estado TURNO ?jugador)) - ) - -;; La ficha no le pertenece -(defrule error3 - (declare (salience 200)) - ?e <- (estado USUARIO ?jugador) - ?p <- (poner ?x ?y) - (ficha ?n ?fx ?fy) - (test (or - (and (= ?x ?fx) (= ?y ?fy)) - (and (= ?x ?fy) (= ?y ?fx)) - )) - (jugador (n ?otro)(fichas $?dummy1 ?n $?dummy2)) - (test (<> ?otro ?jugador)) - => - (printout t "ERROR, esa ficha no es tuya: " - ?x "·" ?y crlf) - (retract ?p ?e) - (assert (estado TURNO ?jugador)) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Leemos por el teclado ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;; Entrada del usuario -(defrule tirada_jugador - (declare (salience 50)) - (estado USUARIO ?jugador) - (jugador (n ?jugador) (tipo HUMANO)) - => - (C_msg ?*MSG_ESCOGE*) - (printout t "Escoge la ficha: " crlf) -;;; (bind ?x (read)) -;;; (bind ?y (read)) - (bind $?xy (C_leer_ficha)) - (bind ?x (nth$ 1 $?xy)) - (bind ?y (nth$ 2 $?xy)) - (bind ?head (nth$ 3 $?xy)) - (if (= ?x -1) then - (assert (pasar ?jugador)) - else (assert (poner ?x ?y)) - ) - (if (= ?head 1) then - (assert (purga TAIL)) - else (assert (purga HEAD))) - (C_flip) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(deffunction leer_tipo(?j) - (bind ?tipo nada) - (C_traza 1) - (while (and (neq ?tipo CPU)(neq ?tipo HUMANO)) - (C_msg ?*MSG_TIPO*) - (C_flip) - (printout t "Elige el tipo del jugador " ?j ": ") - (bind ?tipo (read)) - ) - (C_traza 0) - ?tipo - ) - -(deffunction iniciar() - (reset) - (load cpu.clp) - (load refranes.clp) - (seed (mod (C_time) 1024)) - ;;(seed 125) - (C_sdl_init) - (C_fichas 0 7) - (C_fichas 1 7) - (C_fichas 2 7) - (C_fichas 3 7) - (C_mostrar_mesa) - (printout t "Tipos validos: HUMANO CPU" crlf) -;; (bind ?tipo0 HUMANO) ;(leer_tipo 0)) -;; (bind ?tipo1 CPU) ;(leer_tipo 1)) -;; (bind ?tipo2 CPU) ;(leer_tipo 2)) -;; (bind ?tipo3 CPU);(leer_tipo 3)) - (C_traza 1) - (C_msg ?*MSG_TIPO*) - (C_flip) - (bind $?elige (C_elige_jugadores)) - (if (= (nth$ 1 $?elige) 0) then - (bind ?tipo0 CPU) - else (bind ?tipo0 HUMANO) - ) - (if (= (nth$ 2 $?elige) 0) then - (bind ?tipo1 CPU) - else (bind ?tipo1 HUMANO) - ) - (if (= (nth$ 3 $?elige) 0) then - (bind ?tipo2 CPU) - else (bind ?tipo2 HUMANO) - ) - (if (= (nth$ 4 $?elige) 0) then - (bind ?tipo3 CPU) - else (bind ?tipo3 HUMANO) - ) - (assert (mano (nth$ 5 $?elige))) - (assert - (jugador - (n 0) - (tipo ?tipo0) ;; HUMANO o CPU - (fichas) - (tiene) - (pasa) - (puso) - (abre) - (palos 0 0 0 0 0 0 0) - ) - (jugador - (n 1) - (tipo ?tipo1) - (fichas) - (tiene) - (pasa) - (puso) - (abre) - (palos 0 0 0 0 0 0 0) - ) - (jugador - (n 2) - (tipo ?tipo2) - (fichas) - (tiene) - (pasa) - (puso) - (abre) - (palos 0 0 0 0 0 0 0) - ) - (jugador - (n 3) - (tipo ?tipo3) - (fichas) - (tiene) - (pasa) - (puso) - (abre) - (palos 0 0 0 0 0 0 0) - ) - ) - (assert - (cierre 0 0 0 0 0 0 0) - (estado REPARTIR) - (mesa) - ) - (run) - ) diff --git a/src/win/ejecutar.clp b/src/win/ejecutar.clp deleted file mode 100644 index 5fbd91a..0000000 --- a/src/win/ejecutar.clp +++ /dev/null @@ -1,5 +0,0 @@ -(load domino2.clp) -(deffunction acabar() - (exit) -) -(iniciar) diff --git a/src/win/fichaH.bmp b/src/win/fichaH.bmp deleted file mode 100644 index 9ebf530..0000000 Binary files a/src/win/fichaH.bmp and /dev/null differ diff --git a/src/win/fichaV.bmp b/src/win/fichaV.bmp deleted file mode 100644 index 8e80ba2..0000000 Binary files a/src/win/fichaV.bmp and /dev/null differ diff --git a/src/win/instancias.clp b/src/win/instancias.clp deleted file mode 100644 index a0c255b..0000000 --- a/src/win/instancias.clp +++ /dev/null @@ -1,64 +0,0 @@ -(deffunction iniciar_instancia_cierre() - (reset) - (load cpu.clp) - (load refranes.clp) -;;; (seed (mod (C_time) 1024)) - (seed 125) - (printout t "Tipos validos: HUMANO CPU" crlf) - (bind ?tipo0 CPU);;(leer_tipo 0)) - (bind ?tipo1 CPU);; (leer_tipo 1)) - (bind ?tipo2 CPU);; (leer_tipo 2)) - (bind ?tipo3 CPU);; (leer_tipo 3)) - (assert - (jugador - (n 0) - (tipo ?tipo0) ;; HUMANO o CPU - (fichas 9) - (tiene) - (pasa) - (puso) - (abre) - (palos 1 1 1 0 1 0 0) - ) - (jugador - (n 1) - (tipo ?tipo1) - (fichas 13 20) - (tiene) - (pasa) - (puso) - (abre) - (palos 0 0 0 0 0 0 0) - ) - (jugador - (n 2) - (tipo ?tipo2) - (fichas 18 21) - (tiene) - (pasa) - (puso) - (abre) - (palos 0 0 0 0 0 0 0) - ) - (jugador - (n 3) - (tipo ?tipo3) - (fichas 15 22) - (tiene) - (pasa) - (puso) - (abre) - (palos 0 0 0 0 0 0 0) - ) - ) - (C_sdl_init) - (C_mostrar_mesa) - (C_flip) - (assert - (cierre 6 6 6 6 6 6 6) - (estado TURNO 0) - ;; (mesa 5 1 16 0) - (mesa 19 1 12 0) - ) - (run) - ) diff --git a/src/win/mesa.bmp b/src/win/mesa.bmp deleted file mode 100644 index 89f398b..0000000 Binary files a/src/win/mesa.bmp and /dev/null differ diff --git a/src/win/msg_bmp/base.bmp b/src/win/msg_bmp/base.bmp deleted file mode 100644 index f29ac93..0000000 Binary files a/src/win/msg_bmp/base.bmp and /dev/null differ diff --git a/src/win/msg_bmp/ecolocar.bmp b/src/win/msg_bmp/ecolocar.bmp deleted file mode 100644 index f067fad..0000000 Binary files a/src/win/msg_bmp/ecolocar.bmp and /dev/null differ diff --git a/src/win/msg_bmp/eponer.bmp b/src/win/msg_bmp/eponer.bmp deleted file mode 100644 index fb3660f..0000000 Binary files a/src/win/msg_bmp/eponer.bmp and /dev/null differ diff --git a/src/win/msg_bmp/escoge.bmp b/src/win/msg_bmp/escoge.bmp deleted file mode 100644 index 9c66f2c..0000000 Binary files a/src/win/msg_bmp/escoge.bmp and /dev/null differ diff --git a/src/win/msg_bmp/gana0.bmp b/src/win/msg_bmp/gana0.bmp deleted file mode 100644 index 1dcf087..0000000 Binary files a/src/win/msg_bmp/gana0.bmp and /dev/null differ diff --git a/src/win/msg_bmp/gana1.bmp b/src/win/msg_bmp/gana1.bmp deleted file mode 100644 index 526192e..0000000 Binary files a/src/win/msg_bmp/gana1.bmp and /dev/null differ diff --git a/src/win/msg_bmp/gana2.bmp b/src/win/msg_bmp/gana2.bmp deleted file mode 100644 index 525f11f..0000000 Binary files a/src/win/msg_bmp/gana2.bmp and /dev/null differ diff --git a/src/win/msg_bmp/gana3.bmp b/src/win/msg_bmp/gana3.bmp deleted file mode 100644 index 8c278b2..0000000 Binary files a/src/win/msg_bmp/gana3.bmp and /dev/null differ diff --git a/src/win/msg_bmp/leeme.txt b/src/win/msg_bmp/leeme.txt deleted file mode 100644 index d70aebd..0000000 --- a/src/win/msg_bmp/leeme.txt +++ /dev/null @@ -1,3 +0,0 @@ -- superfícies de 400x20 px -- fondo del marrón del borde del mesa.bmp --> 7f0000 -- letra: fuente BitStream Vera Sans Bold 12 px Hinting y sin Aliasing color amarillof (fff000) diff --git a/src/win/msg_bmp/nadie_puede_poner_mas_fichas.bmp b/src/win/msg_bmp/nadie_puede_poner_mas_fichas.bmp deleted file mode 100644 index cfae8a3..0000000 Binary files a/src/win/msg_bmp/nadie_puede_poner_mas_fichas.bmp and /dev/null differ diff --git a/src/win/msg_bmp/pasa0.bmp b/src/win/msg_bmp/pasa0.bmp deleted file mode 100644 index 5502ac8..0000000 Binary files a/src/win/msg_bmp/pasa0.bmp and /dev/null differ diff --git a/src/win/msg_bmp/pasa1.bmp b/src/win/msg_bmp/pasa1.bmp deleted file mode 100644 index d5eab9a..0000000 Binary files a/src/win/msg_bmp/pasa1.bmp and /dev/null differ diff --git a/src/win/msg_bmp/pasa2.bmp b/src/win/msg_bmp/pasa2.bmp deleted file mode 100644 index 6dc908c..0000000 Binary files a/src/win/msg_bmp/pasa2.bmp and /dev/null differ diff --git a/src/win/msg_bmp/pasa3.bmp b/src/win/msg_bmp/pasa3.bmp deleted file mode 100644 index 7a5554a..0000000 Binary files a/src/win/msg_bmp/pasa3.bmp and /dev/null differ diff --git a/src/win/msg_bmp/tipojugador.bmp b/src/win/msg_bmp/tipojugador.bmp deleted file mode 100644 index 32f410b..0000000 Binary files a/src/win/msg_bmp/tipojugador.bmp and /dev/null differ diff --git a/src/win/msg_bmp/turno0.bmp b/src/win/msg_bmp/turno0.bmp deleted file mode 100644 index 774ae4b..0000000 Binary files a/src/win/msg_bmp/turno0.bmp and /dev/null differ diff --git a/src/win/msg_bmp/turno1.bmp b/src/win/msg_bmp/turno1.bmp deleted file mode 100644 index 651be17..0000000 Binary files a/src/win/msg_bmp/turno1.bmp and /dev/null differ diff --git a/src/win/msg_bmp/turno2.bmp b/src/win/msg_bmp/turno2.bmp deleted file mode 100644 index ef77ae3..0000000 Binary files a/src/win/msg_bmp/turno2.bmp and /dev/null differ diff --git a/src/win/msg_bmp/turno3.bmp b/src/win/msg_bmp/turno3.bmp deleted file mode 100644 index e389fe8..0000000 Binary files a/src/win/msg_bmp/turno3.bmp and /dev/null differ diff --git a/src/win/refranes.clp b/src/win/refranes.clp deleted file mode 100644 index 4bad20d..0000000 --- a/src/win/refranes.clp +++ /dev/null @@ -1,1157 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Refranes implícitos por la forma de evaluar las fichas: -;; La salida del contrario, con tu mayor numerario -;; Si peligroso no fuera, doble gordo a la primera -;; Administra bien los dobles, son ricos o pobres -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - - (deffunction heuristico_puntos_jugador($?arg) - (bind $?tiene (subseq$ $?arg 1 7)) - (bind $?fichas (subseq$ $?arg 8 (length$ $?arg))) - (bind ?i 1) - (bind ?min 10) - (bind ?max 0) - (bind ?extra 0) - (while (<= ?i (length$ $?tiene)) do - (bind ?val (nth$ ?i $?tiene)) - (if (> ?val 0) then - (if (< ?i ?min) then - (bind ?min ?i)) - (if (> ?i ?max) then - (bind ?max ?i)) - ) - (bind ?i (+ ?i 1)) - ) - (bind ?val (+ - ?extra - (* ?min (length$ $?fichas)) - (* (/ (+ ?min ?max) 2) (length$ $?fichas)))) - ?val - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Refranes para controlar la CPU ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;; Compañerismo ;;; -;; La ficha del compañero, repetirla es lo primero -(defrule repetir_companyero_HEAD - (declare (salience 75)) - (estado CPU ?jugador) - (jugador (n ?jugador) - (fichas $?dummy1 ?ficha $?dummy2)) - (jugador (n ?compa) (abre $?abre ?ult) - (tiene $?tiene)) - (test (= ?compa (mod (+ ?jugador 2) 4))) - ?v <- (valor ?ficha ?valorh ?valort) - (ficha ?ficha ?fx ?fy) - (mesa ?head ?sentido $?resto) - (ficha ?head ?hx ?hy) - (test (or - (and - (= ?sentido 1) - (or - (and (= ?fx ?ult) (= ?fy ?hx)) - (and (= ?fy ?ult) (= ?fx ?hx))) - ) - (and - (= ?sentido 0) - (or - (and (= ?fx ?ult) (= ?fy ?hy)) - (and (= ?fy ?ult) (= ?fx ?hy))) - ) - )) - (not (exists (disparo repetir_companyero_HEAD ?ficha))) - => - (if (> (nth$ (+ ?ult 1) $?tiene) 0) then - (retract ?v) - (assert - (valor ?ficha (+ ?valorh 5) ?valort) - (disparo repetir_companyero_HEAD ?ficha) - ) - (printout t tab "Repetir ficha compañero: " - ?fx "·" ?fy crlf) - ) - ) - -(defrule repetir_companyero_TAIL - (declare (salience 75)) - (estado CPU ?jugador) - (jugador (n ?jugador) (fichas $?dummy1 ?ficha $?dummy2)) - (jugador (n ?compa) (abre $?abre ?ult) - (tiene $?tiene)) - (test (= ?compa (mod (+ ?jugador 2) 4))) - ?v <- (valor ?ficha ?valorh ?valort) - (ficha ?ficha ?fx ?fy) - (mesa $?resto ?tail ?sentido) - (ficha ?tail ?tx ?ty) - (test (or - (and - (= ?sentido 1) - (or - (and (= ?fx ?ult) (= ?fy ?ty)) - (and (= ?fy ?ult) (= ?fx ?ty))) - ) - (and - (= ?sentido 0) - (or - (and (= ?fx ?ult) (= ?fy ?tx)) - (and (= ?fy ?ult) (= ?fx ?tx))) - ) - )) - (not (exists (disparo repetir_companyero_TAIL ?ficha))) - => - (if (> (nth$ (+ ?ult 1) $?tiene) 0) then - (retract ?v) - (assert - (valor ?ficha ?valorh (+ ?valort 5)) - (disparo repetir_companyero_TAIL ?ficha) - ) - (printout t tab "Repetir ficha compañero: " - ?fx "·" ?fy crlf) - ) - ) - -;; Cuando el otro ofrece el cierre, seguro está que no pierde. -;;(defrule cierre_contrario -;; (declare (salience 29)) -;; (estado CPU ?jugador) -;; (jugador (n ?jugador) (fichas $?dummy1 ?ficha $?dummy2)) -;; (jugador (n ?otro) (abre $?abre1 ?abre)) -;; (test (es_rival ?jugador ?otro)) -;; (ficha ?ficha ?x ?y) -;; (test (or (= ?x ?abre) (= ?y ?abre))) -;; (mesa $?head ?abre ?sentido $?tail) -;; (test (or -;; (= (length$ $?head) 0) -;; (= (length$ $?tail) 0) -;; )) -;; ?v <- (valor ?ficha ?valorh ?valort) -;; (cierre $?cierre) -;; (test (> (nth$ (+ ?abre 1) $?cierre) 6)) -;; (not (exists (disparo cierre_contrario ?ficha))) -;; ;; TODO: Comprobar la coherencia con la otra regla de cierres -;; => -;; (retract ?v) -;; (assert -;; (valor ?ficha (- ?valorh 10) (- ?valort 10)) -;; (disparo cierre_contrario ?ficha) -;; ) -;; (printout t tab "Cierre del contrario: " ?x " " ?y crlf) -;; ) - -;; Mata ficha del amigo, antes que entre el enemigo -(defrule mata_ficha_de_la_amiga___antes_que_entre_la_enemiga_HEAD - (declare (salience 45)) - (estado CPU ?yo) - ?f <- (jugador (n ?yo) (fichas $?fichas1 ?ficha $?fichas2)) - (jugador (n ?amigo) (abre $?abre1 ?abre)) - (jugador (n ?otro) (tiene $?tiene)) - (test (es_rival ?otro ?yo)) - (test (not (es_rival ?amigo ?yo))) - (test (<> ?yo ?amigo)) - (mesa ?head ?dir $?mesa) - (ficha ?ficha ?x ?y) - (test (<> ?x ?y)) - (test (or (= ?x ?abre) (= ?y ?abre))) - (ficha ?head ?hx ?hy) - (test (or (and (= ?dir 1) (= ?hx ?abre)) - (and (= ?dir 0) (= ?hy ?abre)))) -;;; (test (> (nth$ (+ ?abre 1) $?tiene) 0)) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists (disparo mata_ficha_HEAD ?ficha))) - => - (if (> (nth$ (+ ?abre 1) $?tiene) 0) then -;;; (printout t (nth$ (+ ?abre 1) $?tiene) crlf) - (retract ?v) - (assert (disparo mata_ficha_HEAD ?ficha) - (valor ?ficha (+ ?valorh 5) ?valort)) - (printout t tab - "Mata ficha del amigo, antes que entre el enemigo: " - ?x "·" ?y crlf) - ) - ) - -(defrule mata_ficha_de_la_amiga___antes_que_entre_la_enemiga_TAIL - (declare (salience 45)) - (estado CPU ?yo) - ?f <- (jugador (n ?yo) (fichas $?fichas1 ?ficha $?fichas2)) - (jugador (n ?amigo) (abre $?abre1 ?abre)) - (jugador (n ?otro) (tiene $?tiene)) - (test (es_rival ?otro ?yo)) - (test (not (es_rival ?amigo ?yo))) - (test (<> ?yo ?amigo)) - (mesa $?mesa ?tail ?dir) - (ficha ?ficha ?x ?y) - (test (<> ?x ?y)) - (test (or (= ?x ?abre) (= ?y ?abre))) - (ficha ?tail ?tx ?ty) - (test (or (and (= ?dir 0) (= ?tx ?abre)) (and (= ?dir 1) (= ?ty ?abre)))) -;;; (test (> (nth$ (+ ?abre 1) $?tiene) 0)) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists (disparo mata_ficha_TAIL ?ficha))) - => - (if (> (nth$ (+ ?abre 1) $?tiene) 0) then - (retract ?v) - (assert (disparo mata_ficha_TAIL ?ficha) - (valor ?ficha ?valorh (+ ?valort 5))) - (printout t tab - "Mata ficha del amigo, antes que entre el enemigo: " - ?x "·" ?y crlf) - ) - ) - -;; Siendo el compañero mano, ahorcarse si es necesario -;; TODO: Calcular la heurística para cada jugador, -;; y decidir si es necesario -(defrule siendo_el_companyero_mano_ahorcarse_si_es_necesario_HEAD - (declare (salience 45)) - (estado CPU ?yo) - (jugador (n ?yo) - (fichas $?fichas1 ?ficha1 $?fichas2 ?ficha2 $?fichas3)) - (mano ?mano) - (test (= ?mano (mod (+ ?yo 2) 4))) - (ficha ?ficha1 ?x1 ?y1) - (ficha ?ficha2 ?x2 ?y2) - - (ficha ?ficha_doble ?doble ?doble) - (ficha ?ficha ?x ?y) - (test (and - (or - (and - (= ?x1 ?y1) - (= ?ficha_doble ?ficha1) - (= ?ficha ?ficha2) - ) - (and - (= ?x2 ?y2) - (= ?ficha_doble ?ficha2) - (= ?ficha ?ficha1) - )) - (or - (= ?x2 ?x1) - (= ?y2 ?y1)) - ) - ) - - (cierre $?cierre) - (test (= (nth$ (+ ?doble 1) $?cierre) 5)) - ?v <- (valor ?ficha ?valorh ?valort) - (mesa ?head ?sentido $?resto) - (ficha ?head ?mx ?my) - (test (or - (and (= ?sentido 1) - (= ?mx ?doble) - ) - (and (= ?sentido 0) - (= ?my ?doble) - ) - ) - ) - (not (exists - (disparo - siendo_el_companyero_mano_ahorcarse_si_es_necesario_HEAD - ?ficha))) - => - (retract ?v) - (assert (valor ?ficha (+ ?valorh 10) ?valort) - (disparo - siendo_el_companyero_mano_ahorcarse_si_es_necesario_HEAD - ?ficha) - ) - (printout t tab - "Siendo el compañero mano, ahorcarse si es necesario: " - ?x "·" ?y crlf) - ) - -(defrule siendo_el_companyero_mano_ahorcarse_si_es_necesario_TAIL - (declare (salience 45)) - (estado CPU ?yo) - (jugador (n ?yo) - (fichas $?fichas1 ?ficha1 $?fichas2 ?ficha2 $?fichas3)) - (mano ?mano) - (test (= ?mano (mod (+ ?yo 2) 4))) - (ficha ?ficha1 ?x1 ?y1) - (ficha ?ficha2 ?x2 ?y2) - - (ficha ?ficha_doble ?doble ?doble) - (ficha ?ficha ?x ?y) - (test (and - (or - (and - (= ?x1 ?y1) - (= ?ficha_doble ?ficha1) - (= ?ficha ?ficha2) - ) - (and - (= ?x2 ?y2) - (= ?ficha_doble ?ficha2) - (= ?ficha ?ficha1) - )) - (or - (= ?x2 ?x1) - (= ?y2 ?y1)) - ) - ) - (cierre $?cierre) - (test (= (nth$ (+ ?doble 1) $?cierre) 5)) - ?v <- (valor ?ficha ?valorh ?valort) - (mesa $?resto ?head ?sentido) - (ficha ?head ?mx ?my) - (test (or - (and (= ?sentido 0) - (= ?mx ?doble) - ) - (and (= ?sentido 1) - (= ?my ?doble) - ) - ) - ) - (not (exists - (disparo - siendo_el_companyero_mano_ahorcarse_si_es_necesario_TAIL - ?ficha))) - => - (retract ?v) - (assert (valor ?ficha ?valorh (+ ?valort 10)) - (disparo - siendo_el_companyero_mano_ahorcarse_si_es_necesario_TAIL - ?ficha) - ) - (printout t tab - "Siendo el compañero mano, ahorcarse si es necesario: " - ?x "·" ?y crlf) - ) - -;; Perseguirás con ahinco al seis doble y doble cinco -(defrule perseguiras_con_ahinco_HEAD - (declare (salience 45)) - (estado CPU ?yo) - (jugador (n ?yo) (fichas $?fichas1 ?ficha $?fichas2)) - (mesa ?head $?resto) - (ficha ?head ?mx ?mx) - (ficha ?ficha ?x ?y) - (test (or (= ?x ?mx) (= ?y ?mx))) - (test (or (= ?mx 5) (= ?mx 6))) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists (disparo perseguiras_con_ahinco_HEAD ?ficha))) - => - (retract ?v) - (assert (valor ?ficha (+ ?valorh 10) ?valort) - (disparo perseguiras_con_ahinco_HEAD ?ficha) - ) - (printout t tab - "Perseguiras con ahinco al seis doble y al doble cinco: " - ?x "·" ?y crlf) - ) - -(defrule perseguiras_con_ahinco_TAIL - (declare (salience 45)) - (estado CPU ?yo) - (jugador (n ?yo) (fichas $?fichas1 ?ficha $?fichas2)) - (mesa $?resto ?tail ?sentido) - (ficha ?tail ?mx ?mx) - (ficha ?ficha ?x ?y) - (test (or (= ?x ?mx) (= ?y ?mx))) - (test (or (= ?mx 5) (= ?mx 6))) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists (disparo perseguiras_con_ahinco_TAIL ?ficha))) - => - (retract ?v) - (assert (valor ?ficha ?valorh (+ ?valort 10)) - (disparo perseguiras_con_ahinco_TAIL ?ficha) - ) - (printout t tab - "Perseguiras con ahinco al seis doble y al doble cinco: " - ?x "·" ?y crlf) - ) - -;; Siempre que quieras cerrar, los tantos has de contar -(defrule querer_cerrar_HEAD - (declare (salience 44)) - (estado CPU ?yo) - (jugador (n ?yo) - (fichas $?fichas_H ?ficha $?fichas_T) - (palos $?palos)) - (jugador (n ?uno) - (fichas $?fichas1) (tiene $?tiene1)) - (jugador (n ?otro) - (fichas $?fichas3) (tiene $?tiene3)) - (jugador (n ?compi) - (fichas $?fichas2) (tiene $?tiene2)) - (test (and - (es_rival ?uno ?yo) - (es_rival ?otro ?yo) - (<> ?uno ?otro) - (not (es_rival ?compi ?yo)) - (<> ?yo ?compi) - ) - ) - (ficha ?ficha ?x ?y) - ?v <- (valor ?ficha ?valorh ?valort) - (mesa ?head ?sentidoh $?resto ?tail ?sentidot) - (dobles_mesa $?dobles) - (ficha ?head ?mx ?my) - (ficha ?tail ?tx ?ty) - (cierre $?cierre) - (test - (or - ;;; Primera parte del test - (and - (and - (= ?sentidoh 1) - (= ?sentidot 1) - ) - (or - (and - (= ?mx ?x) - (or - (and - (= (nth$ (+ ?y 1) $?dobles) 1) - (>= (nth$ (+ ?y 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?y 1) $?dobles) 0) - (>= (nth$ (+ ?y 1) $?cierre) 5) - ) - ) - (= ?ty ?y) - ) - (and - (= ?mx ?y) - (or - (and - (= (nth$ (+ ?x 1) $?dobles) 1) - (>= (nth$ (+ ?x 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?x 1) $?dobles) 0) - (>= (nth$ (+ ?x 1) $?cierre) 5) - ) - ) - (= ?ty ?x) - ) - ) - ) - ;;; Segunda parte del test - (and - (and - (= ?sentidoh 0) - (= ?sentidot 1) - ) - (or - (and - (= ?my ?x) - (or - (and - (= (nth$ (+ ?y 1) $?dobles) 1) - (>= (nth$ (+ ?y 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?y 1) $?dobles) 0) - (>= (nth$ (+ ?y 1) $?cierre) 5) - ) - ) - (= ?ty ?y) - ) - (and - (= ?my ?y) - (or - (and - (= (nth$ (+ ?x 1) $?dobles) 1) - (>= (nth$ (+ ?x 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?x 1) $?dobles) 0) - (>= (nth$ (+ ?x 1) $?cierre) 5) - ) - ) - (= ?ty ?x) - ) - ) - ) - ;;; Tercera parte del test - (and - (and - (= ?sentidoh 1) - (= ?sentidot 0) - ) - (or - (and - (= ?mx ?x) - (or - (and - (= (nth$ (+ ?y 1) $?dobles) 1) - (>= (nth$ (+ ?y 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?y 1) $?dobles) 0) - (>= (nth$ (+ ?y 1) $?cierre) 5) - ) - ) - (= ?tx ?y) - ) - (and - (= ?mx ?y) - (or - (and - (= (nth$ (+ ?x 1) $?dobles) 1) - (>= (nth$ (+ ?x 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?x 1) $?dobles) 0) - (>= (nth$ (+ ?x 1) $?cierre) 5) - ) - ) - (= ?tx ?x) - ) - ) - ) - ;;; Cuarta parte del test - (and - (and - (= ?sentidoh 0) - (= ?sentidot 0) - ) - (or - (and - (= ?my ?x) - (or - (and - (= (nth$ (+ ?y 1) $?dobles) 1) - (>= (nth$ (+ ?y 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?y 1) $?dobles) 0) - (>= (nth$ (+ ?y 1) $?cierre) 5) - ) - ) - (= ?tx ?y) - ) - (and - (= ?my ?y) - (or - (and - (= (nth$ (+ ?x 1) $?dobles) 1) - (>= (nth$ (+ ?x 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?x 1) $?dobles) 0) - (>= (nth$ (+ ?x 1) $?cierre) 5) - ) - ) - (= ?tx ?x) - ) - ) - ) - ) - ) - (not (exists (disparo querer_cerrar_HEAD ?ficha))) - => - ;; Conteo de puntos - (bind ?i 1) - (bind ?puntos_yo 0) - (while (<= ?i (length$ $?palos)) do - (bind ?puntos_yo - (+ ?puntos_yo (* (nth$ ?i $?palos) (- ?i 1)))) - (bind ?i (+ ?i 1)) - ) - (bind ?puntos_yo (- ?puntos_yo ?x ?y)) - (bind ?val1 (heuristico_puntos_jugador $?tiene1 $?fichas1)) - (bind ?val2 (heuristico_puntos_jugador $?tiene2 $?fichas2)) - (bind ?val3 (heuristico_puntos_jugador $?tiene3 $?fichas3)) - (if (= (min ?puntos_yo ?val1 ?val2 ?val3) ?puntos_yo) then - (bind ?val 10) - else - (bind ?val -20) - ) - (if (<= (+ ?valorh ?val) 0) then - (bind ?val (- 1 ?valorh)) - ) - ;; Valoracion de la ficha - (retract ?v) - (assert - (valor ?ficha (+ ?valorh ?val) ?valort) - (disparo querer_cerrar_HEAD ?ficha)) - (printout t tab - "Si quieres cerrar, los tantos has de contar: " - ?x "·" ?y " " ?val crlf - tab tab "Jugador " ?yo ": " ?puntos_yo crlf - tab tab "Jugador " ?compi ": " ?val2 " " $?tiene2 crlf - tab tab "Jugador " ?uno ": " ?val1 " " $?tiene1 crlf - tab tab "Jugador " ?otro ": " ?val3 " " $?tiene3 crlf) - ) - -(defrule querer_cerrar_TAIL - (declare (salience 44)) - (estado CPU ?yo) - (jugador (n ?yo) (fichas $?fichas_H ?ficha $?fichas_T) - (palos $?palos)) - (jugador (n ?uno) (fichas $?fichas1) (tiene $?tiene1)) - (jugador (n ?otro) (fichas $?fichas3) (tiene $?tiene3)) - (jugador (n ?compi) (fichas $?fichas2) (tiene $?tiene2)) - (test (and - (es_rival ?uno ?yo) - (es_rival ?otro ?yo) - (<> ?uno ?otro) - (not (es_rival ?compi ?yo)) - (<> ?yo ?compi) - ) - ) - (ficha ?ficha ?x ?y) - ?v <- (valor ?ficha ?valorh ?valort) - (mesa ?tail ?sentidot $?resto ?head ?sentidoh) - (dobles_mesa $?dobles) - (ficha ?head ?my ?mx) - (ficha ?tail ?ty ?tx) - (cierre $?cierre) - (test - (or - ;;; Primera parte del test - (and - (and - (= ?sentidoh 1) - (= ?sentidot 1) - ) - (or - (and - (= ?mx ?x) - (or - (and - (= (nth$ (+ ?y 1) $?dobles) 1) - (>= (nth$ (+ ?y 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?y 1) $?dobles) 0) - (>= (nth$ (+ ?y 1) $?cierre) 5) - ) - ) - (= ?ty ?y) - ) - (and - (= ?mx ?y) - (or - (and - (= (nth$ (+ ?x 1) $?dobles) 1) - (>= (nth$ (+ ?x 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?x 1) $?dobles) 0) - (>= (nth$ (+ ?x 1) $?cierre) 5) - ) - ) - (= ?ty ?x) - ) - ) - ) - ;;; Segunda parte del test - (and - (and - (= ?sentidoh 0) - (= ?sentidot 1) - ) - (or - (and - (= ?my ?x) - (or - (and - (= (nth$ (+ ?y 1) $?dobles) 1) - (>= (nth$ (+ ?y 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?y 1) $?dobles) 0) - (>= (nth$ (+ ?y 1) $?cierre) 5) - ) - ) - (= ?ty ?y) - ) - (and - (= ?my ?y) - (or - (and - (= (nth$ (+ ?x 1) $?dobles) 1) - (>= (nth$ (+ ?x 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?x 1) $?dobles) 0) - (>= (nth$ (+ ?x 1) $?cierre) 5) - ) - ) - (= ?ty ?x) - ) - ) - ) - ;;; Tercera parte del test - (and - (and - (= ?sentidoh 1) - (= ?sentidot 0) - ) - (or - (and - (= ?mx ?x) - (or - (and - (= (nth$ (+ ?y 1) $?dobles) 1) - (>= (nth$ (+ ?y 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?y 1) $?dobles) 0) - (>= (nth$ (+ ?y 1) $?cierre) 5) - ) - ) - (= ?tx ?y) - ) - (and - (= ?mx ?y) - (or - (and - (= (nth$ (+ ?x 1) $?dobles) 1) - (>= (nth$ (+ ?x 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?x 1) $?dobles) 0) - (>= (nth$ (+ ?x 1) $?cierre) 5) - ) - ) - (= ?tx ?x) - ) - ) - ) - ;;; Cuarta parte del test - (and - (and - (= ?sentidoh 0) - (= ?sentidot 0) - ) - (or - (and - (= ?my ?x) - (or - (and - (= (nth$ (+ ?y 1) $?dobles) 1) - (>= (nth$ (+ ?y 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?y 1) $?dobles) 0) - (>= (nth$ (+ ?y 1) $?cierre) 5) - ) - ) - (= ?tx ?y) - ) - (and - (= ?my ?y) - (or - (and - (= (nth$ (+ ?x 1) $?dobles) 1) - (>= (nth$ (+ ?x 1) $?cierre) 6) - ) - (and - (= (nth$ (+ ?x 1) $?dobles) 0) - (>= (nth$ (+ ?x 1) $?cierre) 5) - ) - ) - (= ?tx ?x) - ) - ) - ) - ) - ) - (not (exists (disparo querer_cerrar_TAIL ?ficha))) - => - ;; Conteo de puntos - (bind ?i 1) - (bind ?puntos_yo 0) - (while (<= ?i (length$ $?palos)) do - (bind ?puntos_yo (+ ?puntos_yo - (* (nth$ ?i $?palos) (- ?i 1)))) - (bind ?i (+ ?i 1)) - ) - (bind ?puntos_yo (- ?puntos_yo ?x ?y)) - (bind ?val1 (heuristico_puntos_jugador $?tiene1 $?fichas1)) - (bind ?val2 (heuristico_puntos_jugador $?tiene2 $?fichas2)) - (bind ?val3 (heuristico_puntos_jugador $?tiene3 $?fichas3)) - (if (= (min ?puntos_yo ?val1 ?val2 ?val3) ?puntos_yo) then - (bind ?val 10) - else - (bind ?val -20) - ) - (if (<= (+ ?valort ?val) 0) then - (bind ?val (- 1 ?valort)) - ) - ;; Valoracion de la ficha - (retract ?v) - (assert - (valor ?ficha ?valorh (+ ?valort ?val)) - (disparo querer_cerrar_TAIL ?ficha)) - (printout t tab - "Si quieres cerrar, los tantos has de contar: " - ?x "·" ?y " " ?val crlf - tab tab "Jugador " ?yo ": " ?puntos_yo crlf - tab tab "Jugador " ?compi ": " ?val2 " " $?tiene2 crlf - tab tab "Jugador " ?uno ": " ?val1 " " $?tiene1 crlf - tab tab "Jugador " ?otro ": " ?val3 " " $?tiene3 crlf) - ) - -;; La ficha que debes dar, la que al mano haga pasar - -(defrule la_que_al_mano_haga_pasar_HEAD - (declare (salience 45)) - (estado CPU ?yo) - (mano ?mano) - (jugador (n ?yo) (fichas $?fichas1 ?ficha $?fichas2)) - (jugador (n ?mano) (tiene $?tiene)) - (test (es_rival ?mano ?yo)) - (mesa ?head ?sentido $?resto ?tail ?sentidot) - (ficha ?ficha ?x ?y) - (ficha ?head ?mx ?my) - (ficha ?tail ?tx ?ty) -;; TODO: Este test falla -;; (test -;; (or -;; (and -;; (= ?sentido 1) -;; (or -;; (and -;; (= ?y ?mx) -;; (= (nth$ (+ ?x 1) $?tiene) 0) -;; ) -;; (and -;; (= ?x ?mx) -;; (= (nth$ (+ ?y 1) $?tiene) 0) -;; ) -;; ) -;; ) -;; (and -;; (= ?sentido 0) -;; (or -;; (and -;; (= ?y ?my) -;; (= (nth$ (+ ?x 1) $?tiene) 0) -;; ) -;; (and -;; (= ?x ?my) -;; (= (nth$ (+ ?y 1) $?tiene) 0) -;; ) -;; ) -;; ) -;; ) -;; ) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists - (disparo la_que_haga_al_mano_pasar_HEAD ?ficha))) - => - (if - (or - (and - (= ?sentido 1) - (or - (and - (= ?y ?mx) - (= (nth$ (+ ?x 1) $?tiene) 0) - ) - (and - (= ?x ?mx) - (= (nth$ (+ ?y 1) $?tiene) 0) - ) - ) - ) - (and - (= ?sentido 0) - (or - (and - (= ?y ?my) - (= (nth$ (+ ?x 1) $?tiene) 0) - ) - (and - (= ?x ?my) - (= (nth$ (+ ?y 1) $?tiene) 0) - ) - ) - ) - ) - then - (bind ?val 10) - (if - (or - (and - (= ?sentidot 1) - (= (nth$ (+ ?ty 1) $?tiene) 0) - ) - (and - (= ?sentidot 0) - (= (nth$ (+ ?tx 1) $?tiene) 0) - ) - ) then - (bind ?val 18) - ) - (retract ?v) - (assert - (disparo la_que_haga_al_mano_pasar_HEAD ?ficha) - (valor ?ficha (+ ?valorh ?val) ?valort) - ) - (printout t tab - "La ficha que debes dar, la que al mano haga pasar: " - ?x "·" ?y " " ?val crlf) - ) - ) - -(defrule la_que_al_mano_haga_pasar_TAIL - (declare (salience 45)) - (estado CPU ?yo) - (mano ?mano) - (jugador (n ?yo) (fichas $?fichas1 ?ficha $?fichas2)) - (jugador (n ?mano) (tiene $?tiene)) - (test (es_rival ?mano ?yo)) - (mesa ?head ?sentidoh $?resto ?tail ?sentido) - (ficha ?ficha ?x ?y) - (ficha ?tail ?my ?mx) - (ficha ?head ?hx ?hy) -;; TODO: Este test falla -;; (test -;; (or -;; (and -;; (= ?sentido 1) -;; (or -;; (and -;; (= ?y ?mx) -;; (= (nth$ (+ ?x 1) $?tiene) 0) -;; ) -;; (and -;; (= ?x ?mx) -;; (= (nth$ (+ ?y 1) $?tiene) 0) -;; ) -;; ) -;; ) -;; (and -;; (= ?sentido 0) -;; (or -;; (and -;; (= ?y ?my) -;; (= (nth$ (+ ?x 1) $?tiene) 0) -;; ) -;; (and -;; (= ?x ?my) -;; (= (nth$ (+ ?y 1) $?tiene) 0) -;; ) -;; ) -;; ) -;; ) -;; ) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists - (disparo la_que_haga_al_mano_pasar_TAIL ?ficha))) - => - (if - (or - (and - (= ?sentido 1) - (or - (and - (= ?y ?mx) - (= (nth$ (+ ?x 1) $?tiene) 0) - ) - (and - (= ?x ?mx) - (= (nth$ (+ ?y 1) $?tiene) 0) - ) - ) - ) - (and - (= ?sentido 0) - (or - (and - (= ?y ?my) - (= (nth$ (+ ?x 1) $?tiene) 0) - ) - (and - (= ?x ?my) - (= (nth$ (+ ?y 1) $?tiene) 0) - ) - ) - ) - ) - then - (bind ?val 10) - (if - (or - (and - (= ?sentidoh 1) - (= (nth$ (+ ?hx 1) $?tiene) 0) - ) - (and - (= ?sentidoh 0) - (= (nth$ (+ ?hy 1) $?tiene) 0) - ) - ) then - (bind ?val 18) - ) - (retract ?v) - (assert - (disparo la_que_haga_al_mano_pasar_TAIL ?ficha) - (valor ?ficha ?valorh (+ ?valort ?val)) - ) - (printout t tab - "La ficha que debes dar, la que al mano haga pasar: " - ?x "·" ?y " " ?val crlf) - ) - ) - -;; De seis doble, cinco o cuatro, salir de ellos es barato - -(defrule de_seis_cuatro_o_cinco_barato - (declare (salience 45)) - (estado CPU ?yo) - (jugador (n ?yo) (fichas $?fichas1 ?ficha $?fichas2)) - (mesa) - (ficha ?ficha ?x ?x) - (test - (or - (= ?x 6) - (= ?x 5) - (= ?x 4) - ) - ) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists (disparo de_seis_cuatro_o_cinco ?ficha))) - => - (assert - (disparo de_seis_cuatro_o_cinco ?ficha) - (valor ?ficha (+ ?valorh 5) (+ ?valort 5)) - ) - (retract ?v) - (printout t tab - "De seis doble, cinco o cuatro, salir de ellos es barato: " - ?x "·" ?x crlf) - ) - -;; Pero con cinco de un palo, salir del fallo doblado - -(defrule con_cinco_de_un_palo_salir_fallo_doblado - (declare (salience 45)) - (estado CPU ?yo) - (jugador (n ?yo) (fichas $?fichas1 ?ficha $?fichas2) - (palos $?palos)) - (mesa) - (ficha ?ficha ?x ?x) - (test (>= (nth$ (+ ?x 1) $?palos) 6)) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists (disparo con_cinco_palo ?ficha))) - => - (assert - (disparo con_cinco_palo ?ficha) - (valor ?ficha (+ ?valorh 8) (+ ?valort 8)) - ) - (retract ?v) - (printout t tab - "Pero con cinco de un palo, salir del fallo doblado: " - ?x "·" ?x crlf) - ) - -;; Si ha salido tu contrario, las gordas respetarás - -;; Si piensas es porque no sabes, si no sabes ¿para que piensas? - -(defrule intuicion - (declare (salience 45)) - (estado CPU ?yo) - (jugador (n ?yo) (fichas $?fichas1 ?ficha $?fichas2)) - (test (= (length$ $?fichas1) - (random 0 (+ (length$ $?fichas1) - (length$ $?fichas2))))) - (mesa ?head ?sentidoh $?resto ?tail ?sentidot) - (ficha ?ficha ?x ?y) - (ficha ?head ?hx ?hy) - (ficha ?tail ?tx ?ty) - (test - (or - (and - (= ?sentidoh 1) - (or - (= ?x ?hx) - (= ?y ?hx) - ) - ) - (and - (= ?sentidoh 0) - (or - (= ?x ?hy) - (= ?y ?hy) - ) - ) - (and - (= ?sentidot 1) - (or - (= ?x ?ty) - (= ?y ?ty) - ) - ) - (and - (= ?sentidot 0) - (or - (= ?x ?tx) - (= ?y ?tx) - ) - ) - ) - ) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists (disparo intuicion))) - => - (assert - (disparo intuicion) - (valor ?ficha (+ ?valorh 1) (+ ?valort 1)) - ) - (retract ?v) - (printout t tab - "Si piensas es porque no sabes, si no sabes ¿para que piensas?: " - ?x "·" ?y crlf) - ) - -;; Si te obligan a dar golpe, hazlo siempre a la del doble - -(defrule golpe_a_la_del_doble - (declare (salience 45)) - (estado CPU ?yo) - (jugador (n ?yo) (fichas $?fichas1 ?ficha $?fichas2)) - (mesa ?head ?sentidoh $?resto ?tail ?sentidot) - (ficha ?head ?hx ?hy) - (ficha ?tail ?tx ?ty) - (ficha ?ficha ?x ?y) - (test - (or - (and - (or - (= ?x ?hx) - (= ?y ?hx) - ) - (= ?hx ?hy) - ) - (and - (or - (= ?x ?ty) - (= ?y ?ty) - ) - (= ?tx ?ty) - ) - ) - ) - ?v <- (valor ?ficha ?valorh ?valort) - (not (exists (disparo golpe_al_doble ?ficha))) - => - (bind ?valh 0) - (bind ?valt 0) - (if (= ?hx ?hy) then (bind ?valh 3)) - (if (= ?tx ?ty) then (bind ?valt 3)) - (assert - (disparo golpe_al_doble ?ficha) - (valor ?ficha (+ ?valorh ?valh) (+ ?valort ?valt)) - ) - (retract ?v) - (printout t tab - "Si te obligan a dar golpe, hazlo siempre a la del doble: " - ?x "·" ?y crlf) - ) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/src/win/sdl.dll b/src/win/sdl.dll deleted file mode 100644 index 00822b7..0000000 Binary files a/src/win/sdl.dll and /dev/null differ diff --git a/src/win/seleccion/cpu_negro.bmp b/src/win/seleccion/cpu_negro.bmp deleted file mode 100644 index 834bfc5..0000000 Binary files a/src/win/seleccion/cpu_negro.bmp and /dev/null differ diff --git a/src/win/seleccion/cpu_rojo.bmp b/src/win/seleccion/cpu_rojo.bmp deleted file mode 100644 index ca998a1..0000000 Binary files a/src/win/seleccion/cpu_rojo.bmp and /dev/null differ diff --git a/src/win/seleccion/humano_negro.bmp b/src/win/seleccion/humano_negro.bmp deleted file mode 100644 index 3bebfc8..0000000 Binary files a/src/win/seleccion/humano_negro.bmp and /dev/null differ diff --git a/src/win/seleccion/humano_rojo.bmp b/src/win/seleccion/humano_rojo.bmp deleted file mode 100644 index 1a0f17f..0000000 Binary files a/src/win/seleccion/humano_rojo.bmp and /dev/null differ diff --git a/src/win/seleccion/jugador0.bmp b/src/win/seleccion/jugador0.bmp deleted file mode 100644 index 30a5bff..0000000 Binary files a/src/win/seleccion/jugador0.bmp and /dev/null differ diff --git a/src/win/seleccion/jugador1.bmp b/src/win/seleccion/jugador1.bmp deleted file mode 100644 index 20131a2..0000000 Binary files a/src/win/seleccion/jugador1.bmp and /dev/null differ diff --git a/src/win/seleccion/jugador2.bmp b/src/win/seleccion/jugador2.bmp deleted file mode 100644 index 02ce624..0000000 Binary files a/src/win/seleccion/jugador2.bmp and /dev/null differ diff --git a/src/win/seleccion/jugador3.bmp b/src/win/seleccion/jugador3.bmp deleted file mode 100644 index 65157ca..0000000 Binary files a/src/win/seleccion/jugador3.bmp and /dev/null differ diff --git a/src/win/seleccion/mano_negro.bmp b/src/win/seleccion/mano_negro.bmp deleted file mode 100644 index 2348efb..0000000 Binary files a/src/win/seleccion/mano_negro.bmp and /dev/null differ diff --git a/src/win/seleccion/mano_rojo.bmp b/src/win/seleccion/mano_rojo.bmp deleted file mode 100644 index fe92657..0000000 Binary files a/src/win/seleccion/mano_rojo.bmp and /dev/null differ