Tôi đã thử triển khai AI Tic-Tac-Toe bằng UmmLang.
UmmLang là một ngôn ngữ lập trình esoteric chỉ cung cấp biến, nhập/xuất, câu lệnh điều kiện và nhảy dòng ở mức tối thiểu.
[ Eoeoeomeoeoeo,,,,,,,, sigeoeoeo-k Dongtan-eo? Jun. ] Nó có hình dạng như thế này.
Hầu như không có các cấu trúc điều khiển thông thường như vòng lặp hay hàm. Ngay cả số nguyên cũng phải được biểu diễn chỉ bằng dấu chấm (.), dấu phẩy (,), và khoảng trắng, nên đây là một môi trường khá bất tiện để triển khai các thuật toán thông thường.
Trước tiên, tôi triển khai Tic-Tac-Toe 2×1 để kiểm chứng cách biểu diễn bàn cờ và phương thức cài đặt AI.
Tôi ánh xạ mỗi ô vào một biến, biểu diễn ô trống, X, O lần lượt là 0, 1, 2, rồi liệt kê mọi trạng thái có thể bằng câu lệnh Dongtan(IF) để AI quyết định vị trí sẽ đặt.
Trong quá trình này, tôi cũng đồng thời tạo giao diện hiển thị bàn cờ và cấu trúc xử lý đầu vào của người dùng.
Sau đó, tôi mở rộng nó thành Tic-Tac-Toe 3×3.
Vấn đề là có khoảng 4.520 trạng thái trò chơi hợp lệ, nên việc tự tay viết toàn bộ các trường hợp là điều gần như không thực tế.
Vì vậy tôi đã viết một trình sinh mã riêng bằng Python.
Trình sinh sẽ loại bỏ các trạng thái mà số lượng O nhiều hơn X hoặc trận đấu đã kết thúc, rồi tính nước đi tối ưu của AI Tic-Tac-Toe (dựa trên minimax) cho từng trạng thái.
Kết quả tính toán sau đó được tự động chuyển sang dạng câu lệnh điều kiện Dongtan của UmmLang để tạo ra file case.umm.
Cuối cùng, tôi chèn hàng nghìn nhánh Dongtan đã được sinh vào mã nguồn chính để hoàn thiện logic AI.
Khi tọa độ do người chơi nhập được phản ánh vào các biến của bàn cờ, các câu lệnh điều kiện đã sinh sẽ tìm trường hợp khớp với trạng thái hiện tại của bàn cờ và thực hiện nước đi của AI.
Sau đó bàn cờ được in lại và chương trình nhảy tới phần nhập của người dùng bằng cú pháp Jun để tạo thành vòng lặp trò chơi.
Nói cách khác, ở thời gian chạy, chương trình không thực hiện tìm kiếm hay tính toán mà chỉ chạy các câu lệnh điều kiện đã tạo sẵn, nên dù chưa được tối ưu, tôi vẫn có thể triển khai AI Tic-Tac-Toe.
Tôi cũng đã để lại trên GitHub cách chơi trực tiếp qua trang Ryugod.
Chưa có bình luận nào.