Uploaded by superusersuper

GDL Tic-Tac-Toe (1x3)

advertisement
// --------- Роли игроков --------- role(white)
role(black)
// --------- Возможные состояния игры --------- base(control(white))
base(control(black))
base(cell(M,x)) :- index(M) base(cell(M,o)) :- index(M) base(cell(M,b)) :- index(M) index(1)
index(2)
index(3)
// --------- Возможные действия игроков --------- input(R, mark(M)) :- role(R) & index(M)
input(R, noop) :- role(R)
// --------- Начальное состояние --------- init(cell(1,b))
init(cell(2,b))
init(cell(3,b))
init(control(white))
// --------- Допустимые действия игроков в текущем состоянии --------- legal(R,mark(M)) :- true(cell(M,b)) & true(control(R))
legal(white,noop) :- true(control(black))
legal(black,noop) :- true(control(white))
// --------- Переход к следующему состоянию... --------- // ... Изменяем состояние одной ячейки вследствие хода игрока
next(cell(M,x)) :- does(white,mark(M)) & true(cell(M,b))
next(cell(M,o)) :- does(black,mark(M)) & true(cell(M,b))
// ... Оставляем остальные ячейки в прежнем состоянии
next(cell(M,Z)) :- true(cell(M,Z)) & distinct(W,b)
next(cell(M,b)) :- does(R,mark(J)) & true(cell(M,b)) & distinct(M,J)
// ... Смена игрока
next(control(white)) :- true(control(black))
next(control(black)) :- true(control(white))
// --------- Конечные состояния --------- terminal :- line(Z)
terminal :- ~open
open :- true(cell(M,b))
line(Z) :- true(cell(1,Z)) & true(cell(2,Z)) line(Z) :- true(cell(2,Z)) & true(cell(3,Z)) // --------- Выигрыши --------- goal(white,100) :- line(x) & ~line(o)
goal(white,0) :- ~line(x) & line(o)
goal(black,100) :- ~line(x) & line(o)
goal(black,0) :- line(x) & ~line(o)
Download