Найдите все возможные ходы шахматоподобной игры, используя Пролог - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь сделать играбельную версию этой игры 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).

При всем этом, каков наилучший способ получить все возможные ходы?

...