# Prolog program of spiral game

```%trace
domains

startx,starty = integer
dicevalx,dicevaly = integer
%totalx,totaly = integer

database

state(startx,starty,dicevalx,dicevaly)

predicates

play(startx,starty)
rand(startx,starty)
%turnx(startx,starty,totalx)
%turny(starty,startx,totaly)

clauses

play(Startx,StartY):-
Startx = 25,
Starty <= 25,
write(\"problem solved\").

play(Startx,StartY):-
Starty = 25,
Startx <= 25,
write(\"problem solved\").
play(Startx,Starty):-
Startx = 0,
Starty = 0,
rand(6,Dicevalx),
Newx = Startx + Dicevalx,
rand(6,Dicevaly),
Newy = Starty + Dicevaly,
%Newx <> Newy,
Newvalx=Dicevalx,
Newvaly=Dicevaly,
assert(state(Newx,Newy,Newvalx,Newvaly)),
play(Newx,Newy).

play(Startx,Starty):-
Startx <= 19,
Starty <= 19,
rand(6,Dicevalx),
Newx =     Startx + Dicevalx,
rand(6,Dicevaly),
Newy = Starty + Dicevaly,
Newvalx=Dicevalx,
Newvaly=Dicevaly,
assert(state(Newx,Newy,Newvalx,Newvaly)),
play(Newx,Newy).

play(Startx,Starty):-
Startx < 26,
Starty < 26,
rand(6,Dicevalx),
rand(6,Dicevaly),
Startx + Dicevalx <= 25,
Newx = Startx + Dicevalx,
Newy = Starty + Dicevaly,
Newx <= 25,
Newy <= 25,
Newvalx=Dicevalx,
Newvaly=Dicevaly,
assert(state(Newx,Newy,Newvalx,Newvaly)),
play(Newx,Newy).

rand(X,Y):-
random(Z),
Y = (X - 1) * Z + 1.

goal
makewindow(1,2,3,\"2 player spiral move game\",0,0,25,80),
play(0,0),
save(\"outs.txt\").

***************
spiral1

%trace
domains

startx,starty = integer
dicevalx,dicevaly = integer
totalx,totaly = integer

database

state(startx,starty,dicevalx,dicevaly)

predicates

play(startx,starty)
rand(startx,starty)
turnx(startx,starty,dicevalx,totalx,totaly)
turny(startx,starty,dicevaly,totalx,totaly)
check(startx,dicevalx,finalvalx)

clauses

play(Startx,StartY):-
Startx = 25,
Starty <= 25,
write(\"problem solved\").

play(Startx,StartY):-
Starty = 25,
Startx <= 25,
write(\"problem solved\").

play(Startx,Starty):-
Startx = 0,
Starty = 0,
rand(6,Dicevalx),
Newvalx = Dicevalx,
turnx(Startx,Starty,Newvalx,Totalx,Totaly),
rand(6,Dicevaly),
Newvaly = Dicevaly,
Totalxx = Totalx,
Totalxy = Totaly,
turny(Totalxx,Totalxy,Newvaly,Totalyx,Totalyy),
Newx = Totalyx,
Newy = Totalyy,
assert(state(Newx,Newy,Newvalx,Newvaly)),
play(Newx,Newy).

play(Startx,Starty):-
Startx <= 19,
Starty <= 19,
rand(6,Dicevalx),
Newvalx = Dicevalx,
turnx(Startx,Starty,Newvalx,Totalx,Totaly),
rand(6,Dicevaly),
Newvaly = Dicevaly,
Totalxx = Totalx,
Totalxy = Totaly,
turny(Totalxx,Totalxy,Newvaly,Totalyx,Totalyy),
Newx = Totalyx,
Newy = Totalyy,
assert(state(Newx,Newy,Newvalx,Newvaly)),
play(Newx,Newy).

play(Startx,Starty):-
Startx < 26,
Starty < 26,
rand(6,Dicevalx),
Newvalx=Dicevalx,
/*        turnx(Startx,Starty,Newvalx,Totalx,Totaly),
Totalxx = Totalx,
Totalxy = Totaly,
Totalxx < 25,*/
check(Startx,Newvalx,Totalx),
rand(6,Dicevaly),
Newvaly=Dicevaly,
turny(Totalxx,Totalxy,Newvaly,Totalyx,Totalyy),
Newx = Totalyx,
Newy = Totalyy,
assert(state(Newx,Newy,Newvalx,Newvaly)),
play(Newx,Newy).

rand(X,Y):-
random(Z),
Y = (X - 1) * Z + 1.

turnx(Startx,Starty,Dicevalx,Totalx,Totaly):-
Startx + Dicevalx <> Starty,
free(Totalx),
Totalx = Startx + Dicevalx,
free(Totaly),
Totaly = Starty.

turnx(Startx,Starty,Dicevalx,Totalx,Totaly):-
Startx + Dicevalx = Starty,
free(Totalx),
Totalx = Startx + Dicevalx,
free(Totaly),
Totaly = 0.

turny(Startx,Starty,Dicevaly,Totalx,Totaly):-
Starty + Dicevaly <> Startx,
free(Totaly),
Totaly = Starty + Dicevaly,
free(Totalx),
Totalx = Startx.

turny(Startx,Starty,Dicevaly,Totalx,Totaly):-
Starty + Dicevaly = Startx,
free(Totaly),
Totaly = Starty + Dicevaly,
free(Totalx),
Totalx = 0.

check(Startx,Dicevalx,Finalvalx):-
25 - Startx >= Dicevalx,
free(Finalvalx),
Finalvalx = Startx + Dicevalx.

check(Startx,Dicevalx,Finalvalx):-
25 - Startx <= Dicevalx,
free(Finalvalx),
Finalvalx = Startx.

goal
makewindow(1,2,3,\"2 player spiral move game\",0,0,25,80),
play(0,0),
save(\"outs.txt\").

Output

state(0,2,2,2)
state(4,7,4,5)
state(9,10,5,3)
state(12,16,3,6)
state(15,21,3,5)
state(20,25,5,4)

************

state(3,5,3,5)
state(6,9,3,4)
state(10,13,4,4)
state(0,15,5,2)
state(5,19,5,4)
state(8,20,3,1)
state(11,23,3,3)
state(12,25,1,2)
```

Didn't find what you were looking for? Find more on Prolog program of spiral game