Я пытаюсь сделать играбельную версию этой игры https://www.boardgamegeek.com/boardgame/273396/chameleon, используя Пролог, и мне нужно получить список, который содержит все возможные ходы, которые может сделать игрок, например: valid_moves (+ Board, + Player, -ListOfMoves)
Доска хранится в виде списка фигур примерно так:
% Initial(piece(player, piece_color, column, row))
initial(piece(player1, white, 1, 5)).
initial(piece(player1, black, 2, 5)).
initial(piece(player1, white, 3, 5)).
initial(piece(player1, black, 4, 5)).
initial(piece(player1, white, 5, 5)).
initial(piece(player2, white, 1, 1)).
initial(piece(player2, black, 2, 1)).
initial(piece(player2, white, 3, 3)).
initial(piece(player2, black, 4, 1)).
initial(piece(player2, white, 5, 1)).
% Stores all the "initial" pieces on the board
initial_board(Board) :-
findall(Piece, initial(Piece), Board).
И у меня есть следующие правила для проверки различных ходов:
% king_movement(+piece(Player, Color, Xi, Yi), +Xf, +Yf, +Board)
king_movement(piece(Player, Color, Xi, Yi), Xf, Yf, Board):-
king_movement(Xi, Yi, Xf, Yf, Board, Player).
% bishop_movement(+piece(Player, Color, Xi, Yi), +Xf, +Yf, +Board)
bishop_movement(piece(Player, Color, Xi, Yi), Xf, Yf, Board):-
isSameColor(Xi, Yi, Color),
bishop_movement(Xi, Yi, Xf, Yf, Board, Player).
% knight_movement(+piece(Player, Color, Xi, Yi), +Xf, +Yf, +Board)
knight_movement(piece(Player, Color, Xi, Yi), Xf, Yf, Board):-
\+ isSameColor(Xi, Yi, Color),
knight_movement(Xi, Yi, Xf, Yf, Board, Player).
При всем этом, каков наилучший способ получить все возможные ходы?