在prolog多表时间中读取变量

在prolog多表时间中读取变量,prolog,connect-four,Prolog,Connect Four,我想用prolog编写一个简单的游戏(connectfour),我想多次读取用户的输入,输入的是一个列号 当我第二次读取“Col”并输入不同的值时,它崩溃并给出false(我知道如何读取多次): 例如,为了测试游戏,你可以通过调用play(红色,0)来启动它,然后它会要求输入列号。我认为递归调用中的Col应该是Col1,也就是说,与头中的变量不同。我认为递归调用中的Col应该是Col1,即。,与head中的变量不同。我测试了您的代码,但您希望它做什么还不是很清楚。输入数字后播放(红色,0)结束,

我想用prolog编写一个简单的游戏(connectfour),我想多次读取用户的输入,输入的是一个列号 当我第二次读取“Col”并输入不同的值时,它崩溃并给出false(我知道如何读取多次):


例如,为了测试游戏,你可以通过调用play(红色,0)来启动它,然后它会要求输入列号。

我认为递归调用中的
Col
应该是
Col1
,也就是说,与头中的变量不同。

我认为递归调用中的
Col
应该是
Col1
,即。,与head中的变量不同。

我测试了您的代码,但您希望它做什么还不是很清楚。输入数字后播放(红色,0)结束,然后是什么?@Junuxx,读取结束后有一个分号,它应该继续要求您播放另一个回合,当您输入非0列时,它崩溃(0是保存在“Col”中的值,这就是问题所在)我需要它来读取用户的不同输入。我测试了你的代码,但是你想要它做什么还不是很清楚。输入数字后播放(红色,0)结束,然后是什么?@Junuxx,读取结束后有一个分号,它应该继续要求您播放另一回合,当您输入非0列时,它崩溃(0是保存在“Col”中的值,这就是问题所在)我需要它来读取用户的不同输入。@Alexnder,但我有另一个问题:读同一个输入两次会得到真值,就像我输入两个零,它会给我真值,巫婆会停止提取。我不确定我是否理解你的问题。也许你可以把它重新表述一下,然后作为一个单独的问题发布?@Alexnder,但我有另一个问题:读同一个输入两次就会得到True,就像我输入两个零,它就会给我True witch将停止苛求。我不确定我是否理解你的问题。也许你可以重新措辞,然后作为一个单独的问题发布?
:- dynamic state/3.
:- dynamic top/2.

%% the problem is in the read here
play(Color, Col) :-
top(Col, Raw) -> addRing(Col, Raw, Color); (assert(top(Col,0)) ,addRing(Col, 0, Color)),
win(X,Y,Winner)
-> (write('Game over, winner is '),write(Winner));
(write('Your turn, column? '), read(Col), write('read column is '), write_ln(Col), play(red,Col)).

addRing(Col, Raw, Color):-
assert(state(Col,Raw,Color)),
Next is Raw + 1, retract(top(Col, Raw)), assert(top(Col, Next)).
win(X,Y, Winner) :-
state(X,Y, Color), N1 is X - 1, state(N1, Y, Color), N2 is N1 - 1, state(N2, Y, Color), N3 is N2 - 1, state(N3, Y, Color), Winner = Color.


%% the reset is some methods to determine the winner
win(X,Y, Winner) :-
state(X,Y, Color), N1 is Y - 1, state(X, N1, Color), N2 is N1 - 1, state(X,N2, Color), N3 is N2 - 1, state(X, N3, Color), Winner = Color.

win(X,Y, Winner) :-
state(X,Y, Color),
N1 is X + 1, M1 is Y + 1, state(N1, M1, Color),
N2 is N1 + 1, M2 is M1 + 1, state(N2, M2, Color),
N3 is N2 + 1, M3 is M2 + 1, state(N3, M3, Color),
Winner = Color.

win(X,Y, Winner) :-
state(X,Y, Color),
N1 is X + 1, M1 is Y - 1, state(N1, M1, Color),
N2 is N1 + 1, M2 is M1 - 1, state(N2, M2, Color),
N3 is N2 + 1, M3 is M2 - 1, state(N3, M3, Color),
Winner = Color.