Tôi đang cố gắng giải quyết tic-tac-toe bằng thuật toán minimax đơn giản. Đơn giản, nhưng phải bao gồm rất nhiều ngôn ngữ. Những gì tôi có cho đến thời điểm này:minimax cho tic-tac-toe
Bảng được biểu diễn dưới dạng một mảng gồm 9 biến (không liên kết) được đặt thành x
hoặc o
.
Điều kiện giành chiến thắng sau đó về cơ bản là: win(Player, [X1,X2,X3|_]) :- X1==Player,X2==Player,X3==Player.
v.v ... cho tất cả tám biến thể. vẽ chỉ là một kiểm tra đơn giản cho dù tất cả các biến bị ràng buộc.
Điều khoản di chuyển cũng đơn giản: move(Player, [X|_], 0, 0) :- var(X), X=Player.
, một lần nữa cho tất cả các vị trí có thể (tôi sẽ để lại mã tái sử dụng mở cho chương trình sau :)).
Bây giờ tôi có thể tạo tất cả các bước di chuyển đơn giản: move(Player, Board, X, Y).
về cơ bản là tất cả những gì tôi cần cho minimax (rõ ràng là một hàm tiện ích đơn giản trả về 1 nếu máy tính thắng, 0 trong trường hợp hòa và -1 nếu chiến thắng của con người, thật dễ dàng). Tôi chỉ không có ý tưởng làm thế nào để thực hiện nó và tất cả các ví dụ tôi tìm thấy trên mạng là khá phức tạp và không giải thích tốt.
Lưu ý Tôi ổn với hành vi thời gian chạy^^ hoặc tệ hơn - nó thực sự không hiệu quả. Và vâng tôi biết cách viết minimax trong lisp, python, java - không có ý tưởng làm thế nào để "port" mã đó thành prolog.
Xem http://stackoverflow.com/a/8436788/502187 –