2012-04-07 57 views
5

如何在(例如)一个玩家在4x4板(8个不同的pion)中执行某些操作后列出所有可能的板?在Prolog的4x4板上列出所有可能的操作

介子应,例如:

([1,2,3,4,5,6,7,8]) 

,并在每次玩一次自动它不能再使用。

董事会应该是这样的板

([1,1,-,-],(1,2,-,-)...(1,3,-,-)(1,4,-,-) 
[2,1,-,-],(2,2,-,-)...(2,3,-,-)(2,4,-,-) 
[3,1,-,-],(3,2,-,-)...(3,3,-,-)(3,4,-,-) 
[4,1,-,-],(4,2,-,-)...(4,3,-,-)(4,4,-,-) 

而且每轮一个玩家提出一个介子在黑板上,直到它的全部。

回答

2

我假设你有一个谓词board0_move_board/3,这是一个板B,一个移动M和移动M在B上产生的板之间的三元关系。此外,我假设你有一个谓词board_move/2将棋盘与棋盘上可能的棋子联系起来,并且在回溯棋子上相继给出所有可能的棋子。有了这些谓词,你可以得到所有可能的电路板:

findall(Board, (board_move(Board0, Move), board0_move_board(Board0, Move, Board)), Boards) 
+0

是的,我得到了你所描述成连接与主板玩家的举动,并与移动做过结果董事会“board0_move_board/3”的第一个谓语,但我没有第二个谓词board_move/2..at至少现在用你描述的方式。而且我还必须用这种方式填充我的谓词“移动((Color,_),Board,NewBoardsList): – user1319472 2012-04-08 14:03:54

+0

任何人为了进一步的帮助? – user1319472 2012-04-14 18:56:16