Крестики нолики для 2 игроков - Prolog
Формулировка задачи:
Помогите переделать код, чтобы было 2 игрока, а не игрок и компьютер.
Мною это непостижимо...
Решение задачи: «Крестики нолики для 2 игроков»
textual
Листинг программы
database
db(integer,integer,symbol)
Predicates
predicates
new
pole
nondeterm go(symbol,symbol)
goal
retractall(db(_,_,_)),new,go("X","O"),!,nl.
clauses
new:-assert(db(1,1,"-")),assert(db(1,2,"-")),assert(db(1,3,"-")),
assert(db(2,1,"-")),assert(db(2,2,"-")),assert(db(2,3,"-")),
assert(db(3,1,"-")),assert(db(3,2,"-")),assert(db(3,3,"-")).
db(1,1,"-"). db(1,2,"-"). db(1,3,"-"). db(2,1,"-").db(2,2,"-").
db(2,3,"-"). db(3,1,"-"). db(3,2,"-"). db(3,3,"-").
go(_,_):- db(X,1,Gamer),Gamer<>"-",db(X,2,Gamer),db(X,3,Gamer),write(Gamer," win!\n"),!.
go(_,_):- db(1,X,Gamer),Gamer<>"-",db(2,X,Gamer),db(3,X,Gamer),write(Gamer," win!\n"),!.
go(_,_):- db(1,1,Gamer),Gamer<>"-",db(2,2,Gamer),db(3,3,Gamer),write(Gamer," win!\n"),!.
go(_,_):- db(1,3,Gamer),Gamer<>"-",db(2,2,Gamer),db(3,1,Gamer),write(Gamer," win!\n"),!.
go(Gamer1,Gamer2):-write("Gamer ",Gamer1,":\n","line (ot 1 do 3): "),
readint(R),R>0,R<4,write("column (ot 1 do 3): "),
readint(St),St>0,St<4,db(R,St,"-"),!,retract(db(R,St,"-")),
assert(db(R,St,Gamer1)),pole,go(Gamer2,Gamer1).
go(Gamer1,Gamer2):-write("Error!\n"),go(Gamer1,Gamer2).
pole:- db(1,1,S1),db(1,2,S2),db(1,3,S3),db(2,1,S4),db(2,2,S5),
db(2,3,S6),db(3,1,S7),db(3,2,S8),db(3,3,S9),!,nl,nl,
write(S1,S2,S3),nl,write(S4,S5,S6),nl,write(S7,S8,S9),nl,nl.