我想在Prolog上寫點和框,代碼在這裏不起作用。我想繪製一個框並在棋盤上移動。當使用「play.
」時會出現錯誤,我不知道是否有錯誤。
代碼有什麼問題?
我需要這個代碼在2天的考試幫助的原因請。prolog上的點和框
:- use_module(minimax).
:- dynamic(score/2).
:- dynamic(turn/1).
% bestMove(+Pos, -NextPos)
% Compute the best Next Position from Position Pos
% with minimax or alpha-beta algorithm.
bestMove(Pos, NextPos) :-
minimax(Pos, NextPos, _).
% play
% Start the game.
play :-
nl,
write('===================='), nl,
write('= Dots and Boxes Game ='), nl,
write('===================='), nl, nl,
write('Human starts the game'), nl,
EmptyBoard = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
show(EmptyBoard), nl,
% play ....
% show(+Board)
% Show the board to current output.
show([X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12]) :-
write(' + '), show2(X1),
write(' + '), show2(X2),
write(' + '), nl,
show2(X3), write(' '), show2(X4), write(' '), show2(X5), nl,
write(' + '), show2(X6),
write(' + '), show2(X7),
write(' + '), nl,
show2(X8), write(' '), show2(X9), write(' '), show2(X10), nl,
write(' + '), show2(X11),
write(' + '), show2(X12),
write(' + '), nl.
% show2(+Term)
% Write the term to current outupt
% Replace 0 by ' '.
show2(X) :-
X = 0, !,
write(' ').
show2(X) :-
write(X).
% set score to 0
score(p1,0).
score(p2,0).
updatescore :-
turn(Player),
score(Player,S),
S2 is S+1,
retract(score(Player,S)),
assert(score(Player,S2)).
turn(p1).
next(p2).
next :-
turn(p1),
retract(turn(p1)) ,
assert(turn(p2)),
go.
next :-
turn(p2),
retract(turn(p2)),
assert(turn(p1)),
go.
go :- win, !,
turn(p2), % AI move on P2 turn
write('AI plays '),
ai, !,
show(NextBoard),
turn(Player),
write(Player), write(' Human Turn'), nl,
read(X),
call(X).
win :-
finished,
score(p1,X),
score(p2,Y),
win(X,Y).
win(X,Y) :-
X > Y,
write('Human wins! '),
writef('score1=%w score2=%w',[X,Y]), !,
Y > X,
write('Computer wins! '),
writef('score1=%w score2=%w',[X,Y]), !,
X == Y,
write('It\' a draw! '),
writef('score=%w',[X]).
它在哪裏工作? – WhatsThePoint
你的意思是? –
什麼行導致錯誤? – WhatsThePoint