2012-04-07 52 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