Skip to content

Instantly share code, notes, and snippets.

@PiotrJander
Created October 25, 2020 20:35
Show Gist options
  • Save PiotrJander/bbf01cd1007ffb1ffeb42a1a89c0d51e to your computer and use it in GitHub Desktop.
Save PiotrJander/bbf01cd1007ffb1ffeb42a1a89c0d51e to your computer and use it in GitHub Desktop.
at(baba_class, field(1, 1), 0).
at(is, field(1, 2), 0).
at(you_class, field(1, 3), 0).
at(flag_class, field(3, 1), 0).
at(is, field(3, 2), 0).
at(win_class, field(3, 3), 0).
at(baba, field(2, 2), 0).
at(flag, field(2, 3), 0).
at(Object, field(X1, Y1), Turn) :-
succ(PrevTurn, Turn),
you(Object, PrevTurn),
move(right, PrevTurn),
at(Object, field(X0, Y0), PrevTurn),
X0 = X1,
succ(Y0, Y1).
at(Object, Field, Turn) :-
succ(PrevTurn, Turn),
\+ you(Object, PrevTurn),
at(Object, Field, PrevTurn).
h_pair(field(X1, Y1), field(X2, Y2)) :-
X1 = X2,
succ(Y1, Y2).
v_pair(field(X1, Y1), field(X2, Y2)) :-
succ(X1, X2),
Y1 = Y2.
prop(First, Second, Third, Turn) :-
at(First, FirstField, Turn),
at(Second, SecondField, Turn),
at(Third, ThirdField, Turn),
h_pair(FirstField, SecondField),
h_pair(SecondField, ThirdField).
prop(First, Second, Third, Turn) :-
at(First, FirstField, Turn),
at(Second, SecondField, Turn),
at(Third, ThirdField, Turn),
v_pair(FirstField, SecondField),
v_pair(SecondField, ThirdField).
class(baba, baba_class).
class(flag, flag_class).
you(Object, Turn) :-
class(Object, Class),
prop(Class, is, you_class, Turn).
win(Object, Turn) :-
class(Object, Class),
prop(Class, is, win_class, Turn).
move(right, 0).
game_won(Turn) :-
you(Object1, Turn),
win(Object2, Turn),
at(Object1, Field, Turn),
at(Object2, Field, Turn).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment