Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :- module(nakamura,[nakamura/2]).
- :- use_module(brett).
- :- use_module(zuege).
- nakamura(Farbe,Zug) :-
- stein(Farbe,Stein),
- findall((Linie,Reihe,Color,Klotz),brett(Linie,Reihe,Color,Klotz),Board),
- nl,write('Start'),nl,
- alphabeta(Stein,Stein,-10000,10000,Board,(_,_,VonL,VonR,NachL,NachR,_,_),_,0),
- write('Ende!'),nl,
- atomic_list_concat([VonL,VonR,NachL,NachR],Zug),!.
- stein(weiss,w).
- stein(schwarz,s).
- wert(f,0).
- wert(b,10).
- wert(s,30).
- wert(l,30).
- wert(t,50).
- wert(k,2000).
- %Evaluation des Brettes und der aktuellen Situation
- value(Brett,Value,Gegner) :- %Evaluiert das Brett aus Sicht des Spielers
- gegner(Gegner,Player),
- findall((Player,Figur,VonL,VonR,NachL,NachR,Gegner1,Brett),zugbewegung(Player,Figur,VonL,VonR,NachL,NachR,Gegner1,Brett),PlayerMoves),
- findall((Gegner,Figur1,VonL1,VonR1,NachL1,NachR1,Gegner2,Brett),zugbewegung(Gegner,Figur1,VonL1,VonR1,NachL1,NachR1,Gegner2,Brett),GegnerMoves),
- mobilitaet(PlayerMoves,PlayerValue),
- mobilitaet(GegnerMoves,GegnerValue),
- ValueMoves is PlayerValue - GegnerValue,
- wertung(Brett,Player,ValueFigurenPlayer),
- wertung(Brett,Gegner,ValueFigurenGegner),
- ValueFiguren is ValueFigurenPlayer - ValueFigurenGegner,
- Value is ValueFiguren + ValueMoves.
- mobilitaet(Zuege, MobilitaetWert) :- %berechnet die Mobilitaetspunkte des Spielers
- length(Zuege, MobilitaetWert).
- wertung([(_,_,Farbe,Figur)|RestVomBrett],Stein,Value) :- %berechnet die Punkte aller Figuren des Spielers
- wertung(RestVomBrett,Stein,Value1),
- wert(Figur, Materialwert),
- checkPassendeFarbe(Stein,Farbe,Materialwert,Materialwert1),
- Value is Value1 + Materialwert1.
- wertung([],_,0).
- checkPassendeFarbe(Stein,Farbe,Materialwert,Materialwert1) :- %Ueberprueft ob die Figur auf dem Brett auch wirklich dem Spieler gehört
- Stein == Farbe,
- Materialwert1 is Materialwert.
- checkPassendeFarbe(_,_,_,Materialwert1) :-
- Materialwert1 is 0.
- %Alpha Beta Algorithmus mit Pruning
- alphabeta(Player,MaxiPlayer,Alpha,Beta,Board,NextMove,Eval,Depth) :-
- Depth<2,
- NewDepth is Depth+1,
- findall((Player,Figur,VonL,VonR,NachL,NachR,Gegner,Board),zugbewegung(Player,Figur,VonL,VonR,NachL,NachR,Gegner,Board),Moves),
- write('All Moves:'),sysoutMoves(Moves),nl,
- bounded_best(Player,MaxiPlayer,Alpha,Beta,Board,Moves,NextMove,Eval,NewDepth),
- write('NextMove: '),write(NextMove),nl,!.
- alphabeta(Player,_,_,_,Board,_,Eval,_) :-
- value(Board,Eval,Player),!.
- bounded_best(Player,MaxiPlayer,Alpha,Beta,Board,[(Spieler,Figur,VonL,VonR,NachL,NachR,Gegner,_)|Moves],BestMove,BestEval,Depth) :-
- sysoutMove((Spieler,Figur,VonL,VonR,NachL,NachR,Gegner,_)),
- sysoutMoves(Moves),
- ziehen(Board,(Spieler,Figur,VonL,VonR,NachL,NachR,Gegner,_),NewBoard),
- gegner(Player,NextPlayer),
- alphabeta(NextPlayer,MaxiPlayer,Alpha,Beta,NewBoard,_,Eval,Depth),
- good_enough(Player,MaxiPlayer,Moves,Alpha,Beta,Board,(Spieler,Figur,VonL,VonR,NachL,NachR,Gegner,_),Eval,BestMove,BestEval,Depth).
- good_enough(_,_,[],_,_,_,_,_,_,_) :- !.
- good_enough(Player,MaxiPlayer,_,_,Beta,_,Move,Eval,Move,Eval,_) :-
- minimizing(Player,MaxiPlayer), Eval > Beta,!.
- good_enough(Player,MaxiPlayer,_,Alpha,_,_,Move,Eval,Move,Eval,_) :-
- maximizing(Player,MaxiPlayer), Eval < Alpha,!.
- good_enough(Player,MaxiPlayer,Moves,Alpha,Beta,Board,Move,Eval,BestMove,BestEval,Depth) :-
- new_bounds(Player,MaxiPlayer,Alpha,Beta,Eval,NewAlpha,NewBeta),
- bounded_best(Player,MaxiPlayer,NewAlpha,NewBeta,Board,Moves,Move1,Eval1,Depth),
- better_of(Player,MaxiPlayer,Move,Eval,Move1,Eval1,BestMove,BestEval).
- new_bounds(Player,MaxiPlayer,Alpha,Beta,Eval,Eval,Beta) :-
- minimizing(Player,MaxiPlayer), Eval > Alpha,!.
- new_bounds(Player,MaxiPlayer,Alpha,Beta,Eval,Alpha,Eval) :-
- maximizing(Player,MaxiPlayer), Eval < Beta,!.
- new_bounds(_,_,Alpha,Beta,_,Alpha,Beta).
- better_of(Player,MaxiPlayer,Move1,Eval1,_,Eval2,Move1,Eval1) :-
- maximizing(Player,MaxiPlayer),
- Eval1 >= Eval2,!.
- better_of(Player,MaxiPlayer,_,Eval1,Move2,Eval2,Move2,Eval2) :-
- maximizing(Player,MaxiPlayer),
- Eval2 >= Eval1,!.
- better_of(Player,MaxiPlayer,Move1,Eval1,_,Eval2,Move1,Eval1) :-
- minimizing(Player,MaxiPlayer),
- Eval1 =< Eval2,!.
- better_of(Player,MaxiPlayer,_,Eval1,Move2,Eval2,Move2,Eval2) :-
- minimizing(Player,MaxiPlayer),
- Eval2 =< Eval1,!.
- maximizing(Player,MaxiPlayer) :-
- Player == MaxiPlayer.
- minimizing(Player,MaxiPlayer) :-
- Player \== MaxiPlayer.
- sysoutMoves([(Player,Figur,VonL,VonR,NachL,NachR,Gegner,_)|Moves]) :-
- write(Player),write(','),write(Figur),write(','),write(VonL),write(','),write(VonR),write(','),write(NachL),write(','),write(NachR),write(','),write(Gegner),write(' | '),
- sysoutMoves(Moves).
- sysoutMoves([]).
- sysoutMove((Player,Figur,VonL,VonR,NachL,NachR,Gegner,_)) :-
- write('Aktueller Zug: '),write(Player),write(','),write(Figur),write(','),write(VonL),write(','),write(VonR),write(','),write(NachL),write(','),write(NachR),write(','),write(Gegner),nl.
- zugbewegung(Farbe,Figur,VonLinie,VonReihe,NachLinie,NachReihe,Color,Brett) :-
- member((VonLinie,VonReihe,Farbe,Figur),Brett),
- move(Farbe,Figur,VonLinie,VonReihe,NachLinie,NachReihe,Brett),
- member((NachLinie,NachReihe,Color,_),Brett), % validiert, dass Ausgangs-
- Farbe \= Color. % und Zielfeld gleich sind
- % Hilfspraedikat: Felder auf Diagonalen
- diagonale([(a,5),(b,6)]).
- diagonale([(a,4),(b,5),(c,6)]).
- diagonale([(a,3),(b,4),(c,5),(d,6)]).
- diagonale([(a,2),(b,3),(c,4),(d,5),(e,6)]).
- diagonale([(a,1),(b,2),(c,3),(d,4),(e,5),(f,6)]).
- diagonale([(b,1),(c,2),(d,3),(e,4),(f,5)]).
- diagonale([(c,1),(d,2),(e,3),(f,4)]).
- diagonale([(d,1),(e,2),(f,3)]).
- diagonale([(e,1),(f,2)]).
- diagonale([(a,2),(b,1)]).
- diagonale([(a,3),(b,2),(c,1)]).
- diagonale([(a,4),(b,3),(c,2),(d,1)]).
- diagonale([(a,5),(b,4),(c,3),(d,2),(e,1)]).
- diagonale([(a,6),(b,5),(c,4),(d,3),(e,2),(f,1)]).
- diagonale([(b,6),(c,5),(d,4),(e,3),(f,2)]).
- diagonale([(c,6),(d,5),(e,4),(f,3)]).
- diagonale([(d,6),(e,5),(f,4)]).
- diagonale([(e,6),(f,5)]).
- % Hilfspraedikat: benachbarte Felder auf Linien und Reihen
- nachbar(a,b).
- nachbar(b,c).
- nachbar(c,d).
- nachbar(d,e).
- nachbar(e,f).
- nachbar(1,2).
- nachbar(2,3).
- nachbar(3,4).
- nachbar(4,5).
- nachbar(5,6).
- % Figurenzuege
- % move(Farbe,Figur,VonLinie,VonReihe,NachLinie,NachReihe)
- % Koenig
- move(_,k,Linie,Von,Linie,Nach,_) :-
- nachbar(Von,Nach).
- move(_,k,Linie,Von,Linie,Nach,_) :-
- nachbar(Nach,Von).
- move(_,k,Von,Reihe,Nach,Reihe,_) :-
- nachbar(Von,Nach).
- move(_,k,Von,Reihe,Nach,Reihe,_) :-
- nachbar(Nach,Von).
- move(_,k,VonLinie,VonReihe,NachLinie,NachReihe,_) :-
- nachbar(VonLinie,NachLinie),
- nachbar(VonReihe,NachReihe).
- move(_,k,VonLinie,VonReihe,NachLinie,NachReihe,_) :-
- nachbar(VonLinie,NachLinie),
- nachbar(NachReihe,VonReihe).
- move(_,k,VonLinie,VonReihe,NachLinie,NachReihe,_) :-
- nachbar(NachLinie,VonLinie),
- nachbar(VonReihe,NachReihe).
- move(_,k,VonLinie,VonReihe,NachLinie,NachReihe,_) :-
- nachbar(NachLinie,VonLinie),
- nachbar(NachReihe,VonReihe).
- % Bauer weiss
- move(w,b,Linie,VonReihe,Linie,NachReihe,Brett) :-
- nachbar(VonReihe,NachReihe),
- member((Linie,NachReihe,f,f),Brett). % Zielfeld muss frei sein
- move(w,b,VonLinie,VonReihe,NachLinie,NachReihe,Brett) :-
- nachbar(VonReihe,NachReihe),
- nachbar(VonLinie,NachLinie),
- member((NachLinie,NachReihe,s,_),Brett). % Zielfeld muss besetzt sein
- move(w,b,VonLinie,VonReihe,NachLinie,NachReihe,Brett) :-
- nachbar(VonReihe,NachReihe),
- nachbar(NachLinie,VonLinie),
- member((NachLinie,NachReihe,s,_),Brett). % Zielfeld muss besetzt sein
- % Bauer schwarz
- move(s,b,Linie,VonReihe,Linie,NachReihe,Brett) :-
- nachbar(NachReihe,VonReihe),
- member((Linie,NachReihe,f,f),Brett). % Zielfeld muss frei sein
- move(s,b,VonLinie,VonReihe,NachLinie,NachReihe,Brett) :-
- nachbar(NachReihe,VonReihe),
- nachbar(VonLinie,NachLinie),
- member((NachLinie,NachReihe,w,_),Brett). % Zielfeld muss besetzt sein
- move(s,b,VonLinie,VonReihe,NachLinie,NachReihe,Brett) :-
- nachbar(NachReihe,VonReihe),
- nachbar(NachLinie,VonLinie),
- member((NachLinie,NachReihe,w,_),Brett). % Zielfeld muss besetzt sein
- % Turm
- move(_,t,Linie,VonReihe,Linie,NachReihe,Brett) :-
- member((Linie,NachReihe,_,_),Brett), % Instatiierung von NachReihe erforderlich
- liniefrei(Linie,VonReihe,NachReihe,Brett).
- move(_,t,VonLinie,Reihe,NachLinie,Reihe,Brett) :-
- member((NachLinie,Reihe,_,_),Brett), % Instatiierung von NachLinie erforderlich
- reihefrei(Reihe,VonLinie,NachLinie,Brett).
- % Laeufer
- move(_,l,VonLinie,VonReihe,NachLinie,NachReihe,Brett) :-
- diagonale(D),
- nth1(VonIndex,D,(VonLinie,VonReihe)),
- nth1(NachIndex,D,(NachLinie,NachReihe)),
- diagfrei(D,VonIndex,NachIndex,Brett).
- % Springer
- move(_,s,VonLinie,VonReihe,NachLinie,NachReihe,_) :-
- nachbar(VonReihe,ZwR),
- nachbar(ZwR,NachReihe),
- nachbar(VonLinie,NachLinie).
- move(_,s,VonLinie,VonReihe,NachLinie,NachReihe,_) :-
- nachbar(VonReihe,ZwR),
- nachbar(ZwR,NachReihe),
- nachbar(NachLinie,VonLinie).
- move(_,s,VonLinie,VonReihe,NachLinie,NachReihe,_) :-
- nachbar(ZwR,VonReihe),
- nachbar(NachReihe,ZwR),
- nachbar(VonLinie,NachLinie).
- move(_,s,VonLinie,VonReihe,NachLinie,NachReihe,_) :-
- nachbar(ZwR,VonReihe),
- nachbar(NachReihe,ZwR),
- nachbar(NachLinie,VonLinie).
- move(_,s,VonLinie,VonReihe,NachLinie,NachReihe,_) :-
- nachbar(VonLinie,ZwL),
- nachbar(ZwL,NachLinie),
- nachbar(VonReihe,NachReihe).
- move(_,s,VonLinie,VonReihe,NachLinie,NachReihe,_) :-
- nachbar(VonLinie,ZwL),
- nachbar(ZwL,NachLinie),
- nachbar(NachReihe,VonReihe).
- move(_,s,VonLinie,VonReihe,NachLinie,NachReihe,_) :-
- nachbar(ZwL,VonLinie),
- nachbar(NachLinie,ZwL),
- nachbar(VonReihe,NachReihe).
- move(_,s,VonLinie,VonReihe,NachLinie,NachReihe,_) :-
- nachbar(ZwL,VonLinie),
- nachbar(NachLinie,ZwL),
- nachbar(NachReihe,VonReihe).
- % Hilfsprädikate: zulässige Zugbewegungen über freie Felder
- liniefrei(Linie,Von,Nach,Brett) :-
- Von < Nach,
- V1 is Von + 1,
- freielinie(Linie,V1,Nach,Brett).
- liniefrei(Linie,Von,Nach,Brett) :-
- Nach < Von,
- N1 is Nach + 1,
- freielinie(Linie,N1,Von,Brett).
- freielinie(_,Reihe,Reihe,_).
- freielinie(Linie,Von,Nach,Brett) :-
- member((Linie,Von,f,f),Brett), % Zwischenfeld muss frei sein
- V1 is Von + 1,
- freielinie(Linie,V1,Nach,Brett).
- reihefrei(Reihe,Von,Nach,Brett) :-
- Von @< Nach,
- nachbar(Von,V1),
- freiereihe(Reihe,V1,Nach,Brett).
- reihefrei(Reihe,Von,Nach,Brett) :-
- Nach @< Von,
- nachbar(Nach,N1),
- freiereihe(Reihe,N1,Von,Brett).
- freiereihe(_,Linie,Linie,_).
- freiereihe(Reihe,Von,Nach,Brett) :-
- member((Von,Reihe,f,f),Brett), % Zwischenfeld muss frei sein
- nachbar(Von,V1),
- freiereihe(Reihe,V1,Nach,Brett).
- diagfrei(Diag,Von,Nach,Brett) :-
- Von < Nach,
- V1 is Von + 1,
- freiediag(Diag,V1,Nach,Brett).
- diagfrei(Diag,Von,Nach,Brett) :-
- Nach < Von,
- N1 is Nach + 1,
- freiediag(Diag,N1,Von,Brett).
- freiediag(_,Index,Index,_).
- freiediag(Diag,Von,Nach,Brett) :-
- nth1(Von,Diag,(ZwLinie,ZwReihe)),
- member((ZwLinie,ZwReihe,f,f),Brett), % Zwischenfeld muss frei sein
- V1 is Von + 1,
- freiediag(Diag,V1,Nach,Brett).
- ziehen(Brett,(Stein,Figur,VonL,VonR,NachL,NachR,Gegner,_),Brett2Test) :-
- append(Br1,[(VonL,VonR,Stein,Figur)|Br2],Brett), %Br1 = Liste aller Felder, die vor (VonL,VonR,Stein,Figur) in der Liste Brett stehen %Br2 = Liste aller Felder, die hinter (VonL,VonR,Stein,Figur) in der Liste Brett stehen
- append(Br1,[(VonL,VonR,f,f)|Br2],Br3), %Br3 = Liste aller Felder mit dem geleerten Feld
- append(Br4,[(NachL,NachR,Gegner,_)|Br5],Br3), %Wiederholt sich für Br4, Br5, Brett2Test(neue Stellung des Brettes nach Bewegung des Spielsteins)
- append(Br4,[(NachL,NachR,Stein,Figur)|Br5],Brett2Test),!.
- keinSchach(Stein,Brett2Test) :- %Überprüft ob nach einer Bewegung, ob jemand Schach ist
- member((Linie,Reihe,Stein,k),Brett2Test),
- ruhepos(Linie,Reihe,Stein,Brett2Test),!.
- ruhepos(L,R,S,B2T) :-
- keineRuhePos(L,R,S,B2T),
- !,fail.
- ruhepos(_,_,_,_).
- keineRuhePos(L,R,w,B2T) :-
- neben(Nl,L),
- neben(R,Nr),
- member((Nl,Nr,s,b),B2T),!.
- keineRuhePos(L,R,w,B2T) :-
- neben(L,Nl),
- neben(R,Nr),
- member((Nl,Nr,s,b),B2T),!.
- keineRuhePos(L,R,s,B2T) :-
- neben(Nl,L),
- neben(Nr,R),
- member((Nl,Nr,w,b),B2T),!.
- keineRuhePos(L,R,s,B2T) :-
- neben(L,Nl),
- neben(Nr,R),
- member((Nl,Nr,w,b),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(N,L),
- member((N,R,G,k),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(L,N),
- member((N,R,G,k),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(N,R),
- member((L,N,G,k),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(R,N),
- member((L,N,G,k),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(Nl,L),
- neben(Nr,R),
- member((Nl,Nr,G,k),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(Nl,L),
- neben(R,Nr),
- member((Nl,Nr,G,k),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(L,Nl),
- neben(Nr,R),
- member((Nl,Nr,G,k),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(L,Nl),
- neben(R,Nr),
- member((Nl,Nr,G,k),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(N,R),
- neben(Nr,N),
- neben(L,Nl),
- member((Nl,Nr,G,s),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(N,R),
- neben(Nr,N),
- neben(Nl,L),
- member((Nl,Nr,G,s),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(N,L),
- neben(Nl,N),
- neben(Nr,R),
- member((Nl,Nr,G,s),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(N,L),
- neben(Nl,N),
- neben(R,Nr),
- member((Nl,Nr,G,s),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(R,N),
- neben(N,Nr),
- neben(Nl,L),
- member((Nl,Nr,G,s),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(R,N),
- neben(N,Nr),
- neben(L,Nl),
- member((Nl,Nr,G,s),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(L,N),
- neben(N,Nl),
- neben(R,Nr),
- member((Nl,Nr,G,s),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- gegner(S,G),
- neben(L,N),
- neben(N,Nl),
- neben(Nr,R),
- member((Nl,Nr,G,s),B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- keineRuhePosTurmNord(L,R,S,B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- keineRuhePosTurmOst(L,R,S,B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- keineRuhePosTurmSued(L,R,S,B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- keineRuhePosTurmWest(L,R,S,B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- keineRuhePosLfrNO(L,R,S,B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- keineRuhePosLfrSO(L,R,S,B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- keineRuhePosLfrSW(L,R,S,B2T),!.
- keineRuhePos(L,R,S,B2T) :-
- keineRuhePosLfrNW(L,R,S,B2T),!.
- keineRuhePosTurmNord(L,R,S,B2T) :-
- neben(R,N),
- keineRuhePosNord(L,N,S,B2T),!.
- keineRuhePosNord(L,R,S,B2T) :-
- member((L,R,f,f),B2T),!,
- keineRuhePosTurmNord(L,R,S,B2T).
- keineRuhePosNord(L,R,S,B2T) :-
- gegner(S,G),
- member((L,R,G,t),B2T),!.
- keineRuhePosNord(_,_,_,_) :-
- !,fail.
- keineRuhePosTurmOst(L,R,S,B2T) :-
- neben(L,N),
- keineRuhePosOst(N,R,S,B2T),!.
- keineRuhePosOst(L,R,S,B2T) :-
- member((L,R,f,f),B2T),!,
- keineRuhePosTurmOst(L,R,S,B2T).
- keineRuhePosOst(L,R,S,B2T) :-
- gegner(S,G),
- member((L,R,G,t),B2T),!.
- keineRuhePosOst(_,_,_,_) :-
- !,fail.
- keineRuhePosTurmSued(L,R,S,B2T) :-
- neben(N,R),
- keineRuhePosSued(L,N,S,B2T),!.
- keineRuhePosSued(L,R,S,B2T) :-
- member((L,R,f,f),B2T),!,
- keineRuhePosTurmSued(L,R,S,B2T).
- keineRuhePosSued(L,R,S,B2T) :-
- gegner(S,G),
- member((L,R,G,t),B2T),!.
- keineRuhePosSued(_,_,_,_) :-
- !,fail.
- keineRuhePosTurmWest(L,R,S,B2T) :-
- neben(N,L),
- keineRuhePosWest(N,R,S,B2T),!.
- keineRuhePosWest(L,R,S,B2T) :-
- member((L,R,f,f),B2T),!,
- keineRuhePosTurmWest(L,R,S,B2T).
- keineRuhePosWest(L,R,S,B2T) :-
- gegner(S,G),
- member((L,R,G,t),B2T),!.
- keineRuhePosWest(_,_,_,_) :-
- !,fail.
- keineRuhePosLfrNO(L,R,S,B2T) :-
- neben(L,Nl),
- neben(R,Nr),
- keineRuhePosNO(Nl,Nr,S,B2T),!.
- keineRuhePosNO(L,R,S,B2T) :-
- member((L,R,f,f),B2T),!,
- keineRuhePosLfrNO(L,R,S,B2T).
- keineRuhePosNO(L,R,S,B2T) :-
- gegner(S,G),
- member((L,R,G,l),B2T),!.
- keineRuhePosNO(_,_,_,_) :-
- !,fail.
- keineRuhePosLfrSO(L,R,S,B2T) :-
- neben(L,Nl),
- neben(Nr,R),
- keineRuhePosSO(Nl,Nr,S,B2T),!.
- keineRuhePosSO(L,R,S,B2T) :-
- member((L,R,f,f),B2T),!,
- keineRuhePosLfrSO(L,R,S,B2T).
- keineRuhePosSO(L,R,S,B2T) :-
- gegner(S,G),
- member((L,R,G,l),B2T),!.
- keineRuhePosSO(_,_,_,_) :-
- !,fail.
- keineRuhePosLfrSW(L,R,S,B2T) :-
- neben(Nl,L),
- neben(Nr,R),
- keineRuhePosSW(Nl,Nr,S,B2T),!.
- keineRuhePosSW(L,R,S,B2T) :-
- member((L,R,f,f),B2T),!,
- keineRuhePosLfrSW(L,R,S,B2T).
- keineRuhePosSW(L,R,S,B2T) :-
- gegner(S,G),
- member((L,R,G,l),B2T),!.
- keineRuhePosSW(_,_,_,_) :-
- !,fail.
- keineRuhePosLfrNW(L,R,S,B2T) :-
- neben(Nl,L),
- neben(R,Nr),
- keineRuhePosNW(Nl,Nr,S,B2T),!.
- keineRuhePosNW(L,R,S,B2T) :-
- member((L,R,f,f),B2T),!,
- keineRuhePosLfrNW(L,R,S,B2T).
- keineRuhePosNW(L,R,S,B2T) :-
- gegner(S,G),
- member((L,R,G,l),B2T),!.
- keineRuhePosNW(_,_,_,_) :-
- !,fail.
- gegner(w,s).
- gegner(s,w).
- neben(1,2).
- neben(2,3).
- neben(3,4).
- neben(4,5).
- neben(5,6).
- neben(a,b).
- neben(b,c).
- neben(c,d).
- neben(d,e).
- neben(e,f).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement