2012-04-07 29 views
5

Làm cách nào để liệt kê tất cả các bảng có thể sau (ví dụ) một người chơi thực hiện một số hành động trong bảng 4x4 (với 8 pion khác nhau)?Liệt kê tất cả các hành động có thể có trên bảng 4x4 trong Prolog

Các pion nên, ví dụ:

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

và mỗi lần bạn chơi một cách tự động nó không thể tái sử dụng.

Ban nên giống như bảng này

([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,-,-) 

Và một cầu thủ mỗi vòng đặt một pion trên bảng cho đến khi nó đầy đủ.

Trả lời

2

Tôi giả sử bạn có một biến vị ngữ như board0_move_board/3, là mối quan hệ bậc ba giữa bảng B, di chuyển M và bảng kết quả sau khi di chuyển M được thực hiện trên B. Hơn nữa, tôi giả sử bạn có vị từ board_move/2 liên quan đến một hội đồng để di chuyển có thể có trên bảng đó, và trên backtracking liên tục cung cấp cho tất cả các di chuyển có thể. Với những vị từ này, bạn có thể nhận được tất cả các bảng có thể có:

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

Có tôi nhận được biến vị ngữ đầu tiên mà bạn mô tả là "board0_move_board/3". nhưng tôi không có vị ngữ thứ hai board_move/2..at ít nhất bây giờ với cách mà bạn mô tả. và tôi cũng phải điền vào vị ngữ của tôi như thế này "di chuyển ((Color, _), Board, NewBoardsList): – user1319472

+0

bất cứ ai cho fyrther giúp đỡ? – user1319472

Các vấn đề liên quan