:-use_module('pl-man-game/main'). :-dynamic e/1. :-dynamic p/1. % SOLUCION PLMAN/MAPS/F4/MAPA3 e(ai). p(b0). sn(D,O) :- see(normal,D,O). nsn(D,O) :- not(see(normal,D,O)). sl(D,L) :- see(list,D,L). hO(O) :- havingObject(appearance(O)). hO :- havingObject. change(EST) :- retractall(e(_)), assert(e(EST)). changep(EST) :- retractall(p(_)), assert(p(EST)). do(ACT) :- do2(n,ai,ACT). dir(down). dir(right). dir(left). dir(up). dir1(up-right). dir1(down-right). dir1(up-left). dir1(down-left). %% GhostBusters1 do2(n,ai,move(left)) :- sn(up,'F'), sn(up-right,'F'), sn(down,'#'). do2(n,ai,move(right)) :- sn(up,'F'), sn(up-left,'F'), sn(down,'#'). do2(n,ai,move(right)) :- sn(down,'F'), sn(down-left,'F'), sn(up,'#'). do2(n,ai,move(left)) :- sn(down,'F'), sn(down-right,'F'), sn(up,'#'). do2(n,ai,move(down)) :- sn(left,'F'), sn(up-left,'F'), sn(right,'#'). do2(n,ai,move(up)) :- sn(left,'F'), sn(down-left,'F'), sn(right,'#'). do2(n,ai,move(up)) :- sn(right,'F'), sn(down-right,'F'), sn(left,'#'). do2(n,ai,move(down)) :- sn(right,'F'), sn(up-right,'F'), sn(left,'#'). do2(n,ai,move(left)) :- sn(down,'F'), sn(right,'F'), sn(up,'#'). do2(n,ai,move(right)) :- sn(up,'F'), sn(left,'F'), sn(down,'#'). do2(n,ai,move(down)) :- sn(right,'F'), sn(up,'F'), sn(left,'#'). do2(n,ai,move(up)) :- sn(left,'F'), sn(down,'F'), sn(right,'#'). do2(n,ai,move(left)) :- sn(up,'F'), sn(right,'F'), sn(down,'#'). do2(n,ai,move(right)) :- sn(down,'F'), sn(left,'F'), sn(up,'#'). do2(n,ai,move(down)) :- sn(left,'F'), sn(up,'F'), sn(right,'#'). do2(n,ai,move(up)) :- sn(right,'F'), sn(down,'F'), sn(left,'#'). do2(n,ai,move(left)) :- sn(up,'F'), sn(up-right,'F'), sl(down,L), nth0(1,L,'F'). do2(n,ai,move(right)) :- sn(up,'F'), sn(up-left,'F'), sl(down,L), nth0(1,L,'F'). do2(n,ai,move(right)) :- sn(down,'F'), sn(down-left,'F'), sl(up,L), nth0(1,L,'F'). do2(n,ai,move(left)) :- sn(down,'F'), sn(down-right,'F'), sl(up,L), nth0(1,L,'F'). do2(n,ai,move(down)) :- sn(left,'F'), sn(up-left,'F'), sl(right,L), nth0(1,L,'F'). do2(n,ai,move(up)) :- sn(left,'F'), sn(down-left,'F'), sl(right,L), nth0(1,L,'F'). do2(n,ai,move(up)) :- sn(right,'F'), sn(down-right,'F'), sl(left,L), nth0(1,L,'F'). do2(n,ai,move(down)) :- sn(right,'F'), sn(up-right,'F'), sl(left,L), nth0(1,L,'F'). do2(n,ai,move(left)) :- sn(down,'F'), sn(right,'F'), sl(up,L), nth0(1,L,'F'). do2(n,ai,move(right)) :- sn(up,'F'), sn(left,'F'), sl(down,L), nth0(1,L,'F'). do2(n,ai,move(down)) :- sn(right,'F'), sn(up,'F'), sl(left,L), nth0(1,L,'F'). do2(n,ai,move(up)) :- sn(left,'F'), sn(down,'F'), sl(right,L), nth0(1,L,'F'). do2(n,ai,move(left)) :- sn(up,'F'), sn(right,'F'), sl(down,L), nth0(1,L,'F'). do2(n,ai,move(right)) :- sn(down,'F'), sn(left,'F'), sl(up,L), nth0(1,L,'F'). do2(n,ai,move(down)) :- sn(left,'F'), sn(up,'F'), sl(right,L), nth0(1,L,'F'). do2(n,ai,move(up)) :- sn(right,'F'), sn(down,'F'), sl(left,L), nth0(1,L,'F'). do2(n,ai,move(left)) :- sn(up,'F'), sl(right,L), nth0(1,L,'F'), sn(down,'#'). do2(n,ai,move(right)) :- sn(down,'F'), sl(left,L), nth0(1,L,'F'), sn(up,'#'). do2(n,ai,move(down)) :- sn(left,'F'), sl(up,L), nth0(1,L,'F'), sn(right,'#'). do2(n,ai,move(up)) :- sn(right,'F'), sl(down,L), nth0(1,L,'F'), sn(left,'#'). do2(n,ai,move(left)) :- sn(up,'F'), sn(down-right,'F'). do2(n,ai,move(right)) :- sn(up,'F'), sn(down-left,'F'). do2(n,ai,move(down)) :- sn(up,'F'), sn(up-right,'F'). do2(n,ai,move(down)) :- sn(up,'F'), sn(up-left,'F'). do2(n,ai,move(right)) :- sn(down,'F'), sn(up-left,'F'). do2(n,ai,move(left)) :- sn(down,'F'), sn(up-right,'F'). do2(n,ai,move(up)) :- sn(down,'F'), sn(down-left,'F'). do2(n,ai,move(up)) :- sn(down,'F'), sn(down-right,'F'). do2(n,ai,move(right)) :- sn(left,'F'), sn(up-left,'F'). do2(n,ai,move(right)) :- sn(left,'F'), sn(down-left,'F'). do2(n,ai,move(down)) :- sn(left,'F'), sn(up-right,'F'). do2(n,ai,move(up)) :- sn(left,'F'), sn(down-right,'F'). do2(n,ai,move(left)) :- sn(right,'F'), sn(down-right,'F'). do2(n,ai,move(left)) :- sn(right,'F'), sn(up-right,'F'). do2(n,ai,move(up)) :- sn(right,'F'), sn(down-left,'F'). do2(n,ai,move(down)) :- sn(right,'F'), sn(up-left,'F'). do2(n,ai,move(down)) :- sn(up,'F'), sl(right,L), nth0(1,L,'F'). do2(n,ai,move(up)) :- sn(down,'F'), sl(left,L), nth0(1,L,'F'). do2(n,ai,move(right)) :- sn(left,'F'), sl(up,L), nth0(1,L,'F'). do2(n,ai,move(left)) :- sn(right,'F'), sl(down,L), nth0(1,L,'F'). do2(n,ai,move(down)) :- sn(up,'F'), sn(right,'F'). do2(n,ai,move(up)) :- sn(down,'F'), sn(left,'F'). do2(n,ai,move(right)) :- sn(left,'F'), sn(up,'F'). do2(n,ai,move(left)) :- sn(right,'F'), sn(down,'F'). do2(n,ai,move(up)) :- sn(right,'F'), sn(down,'#'). do2(n,ai,move(down)) :- sn(left,'F'), sn(up,'#'). do2(n,ai,move(left)) :- sn(up,'F'), sn(right,'#'). do2(n,ai,move(right)) :- sn(down,'F'), sn(left,'#'). do2(n,ai,move(up)) :- sn(right,'F'), sn(down-right,'#'), sn(down-left,'#'). do2(n,ai,move(none)) :- dir1(D), sn(D,'F'). do2(n,ai,move(down)) :- sn(right,'F'). do2(n,ai,move(up)) :- sn(left,'F'). do2(n,ai,move(right)) :- sn(up,'F'). do2(n,ai,move(left)) :- sn(down,'F'). do2(n,ai,move(none)) :- dir(D), sl(D,L), nth0(1,L,'F'). %% Pistola do2(n,ai,get(D)) :- dir(D), sn(D,'l'), p(b0), changep(b2). do2(n,ai,use(D)) :- dir(D), sl(D,L), member('F',L), p(b2), changep(b1). do2(n,ai,use(D)) :- dir(D), sl(D,L), member('F',L), p(b1), changep(b0). %% General do2(n,ai,move(D)) :- dir(D), sn(D,'.'). do2(n,ai,move(D)) :- dir(D), sl(D,L), member('.',L). %% Abajo-izquierda do2(n,ai,move(up)) :- e(ai), sn(left,'#'), sn(down,'#'), sn(down-left,'#'), change(ad). do2(n,ai,move(left)) :- e(ai), sn(left,' '). do2(n,ai,move(left)) :- e(ai), sn(left,'l'). do2(n,ai,move(down)) :- e(ai), sn(down,' '). do2(n,ai,move(down)) :- e(ai), sn(down,'l'). %% Arriba-Derecha do2(n,ai,move(right)) :- e(ad), sn(right,' '). do2(n,ai,move(right)) :- e(ad), sn(right,'l'). do2(n,ai,move(up)) :- e(ad), sn(up,' '). do2(n,ai,move(up)) :- e(ad), sn(up,'l'). do2(n,ai,move(down)) :- e(ad), sn(right,'#'), sn(up,'#'), sn(up-right,'#'),change(ai).