Tic Tac Toe
Click in a clear square
to mark that square.
Player:
x
white
black
0
0
cell(1,1,b) cell(1,2,b) cell(1,3,b) cell(2,1,b) cell(2,2,b) cell(2,3,b) cell(3,1,b) cell(3,2,b) cell(3,3,b) control(x)
click(reset) :: cell(M,N,W) ==> ~cell(M,N,W) click(reset) :: control(W) ==> ~control(W) click(reset) :: cell(1,1,b) & cell(1,2,b) & cell(1,3,b) & cell(2,1,b) & cell(2,2,b) & cell(2,3,b) & cell(3,1,b) & cell(3,2,b) & cell(3,3,b) & control(x) click(mark(M,N)) :: control(P) ==> cell(M,N,P) & ~cell(M,N,b) click(mark(M,N)) :: control(x) ==> ~control(x) & control(o) click(mark(M,N)) :: control(o) ==> ~control(o) & control(x) goal(white,100) :- line(x) & ~line(o) goal(white,50) :- line(x) & line(o) goal(white,50) :- ~line(x) & ~line(o) goal(white,0) :- ~line(x) & line(o) goal(black,100) :- ~line(x) & line(o) goal(black,50) :- line(x) & line(o) goal(black,50) :- ~line(x) & ~line(o) goal(black,0) :- line(x) & ~line(o) terminal :- line(x) terminal :- line(o) terminal :- ~open row(M,X) :- cell(M,1,X) & cell(M,2,X) & cell(M,3,X) col(N,X) :- cell(1,N,X) & cell(2,N,X) & cell(3,N,X) diag(X) :- cell(1,1,X) & cell(2,2,X) & cell(3,3,X) diag(X) :- cell(1,3,X) & cell(2,2,X) & cell(3,1,X) line(X) :- row(M,X) line(X) :- col(N,X) line(X) :- diag(X) open :- cell(M,N,b) index(1) index(2) index(3) innerhtml(mark(M,N)," ") :- cell(M,N,b) innerhtml(mark(M,N),W) :- cell(M,N,W) & distinct(W,b) innerhtml(control,W) :- control(W) innerhtml(whitereward,N) :- goal(white,N) innerhtml(blackreward,N) :- goal(black,N) attribute(mark(M,N),"onclick","handle(this)") :- ~terminal & cell(M,N,b) & parameter(user,X) & control(X) attribute(mark(M,N),"onclick","true") :- terminal & index(M) & index(N) attribute(mark(M,N),"onclick","true") :- cell(M,N,W) & distinct(W,b) attribute(mark(M,N),"onclick","true") :- index(M) & index(N) & parameter(user,X) & control(Y) & distinct(X,Y) style(mark(M,N),"cursor","pointer") :- ~terminal & cell(M,N,b) & parameter(user,X) & control(X) style(mark(M,N),"cursor","text") :- terminal & index(M) & index(N) style(mark(M,N),"cursor","text") :- cell(M,N,W) & distinct(W,b) style(mark(M,N),"cursor","text") :- index(M) & index(N) & parameter(user,X) & control(Y) & distinct(X,Y) style(rewards,"display",D) :- evaluate(if(terminal,"",true,"none"),D)