Console Tic-Tac-Toe App (tiếp theo)

Tram Ho

Như vậy là để Computer có thể cân bằng kết quả ván cờ thì chúng ta cần bổ sung thêm logic chặn bước đi tạo cơ hội kép của User. Trong trường hợp này thì procedure mới sẽ có mức độ ưu tiên thấp hơn so với Get_Prioritized;. Vì vậy nên ở code sử dụng tại Get (Computer_Move, App_State);, chúng ta sẽ đặt procedure mới bổ sung ở giữa Get_Prioritized;Block_Direct_Winning;.

Và để định nghĩa cho Computer về bước đi tạo cơ hội kép của User thì chúng ta vẫn sẽ thực hiện thao tác lặp để tạo ra các trạng thái tiên đoán của User_SetCommon_Set, sau đó dựa trên trạng thái tiên đoán này lại tiếp tục tính toán số lượng bước đi thắng cuộc ở lượt tiếp theo nữa.

Nếu như số lượng bước đi thắng cuộc ở lượt sau cùng nhiều hơn 1 thì có nghĩa là bước đi tiên đoán trước đó là một bước đi tạo Double_Threat, và chúng ta cần gán giá trị của bước đi tiên đoán này cho Computer_Move để chặn lại.

Cuối cùng là chúng ta cần đảm bảo các procedure đều được khai báo đầy đủ trong tệp cấu hình của package AI_Mockup.

Để xem Computer đã có thể cân bằng được kết quả ván cờ trong tình huống trước đó hay chưa.

Oh… Như vậy là ở đây khi User: X chọn trước góc phía dưới bên trái và góc phía trên bên phải thì các góc còn lại vẫn đang để trống và đều là bước đi có thể tạo Double_Threat. Nếu vậy cho dù Computer có chặn bước đi nào thì cũng đều chưa thể cân bằng được kết quả ván cờ. Có lẽ là chúng ta vẫn cần bổ sung thêm một logic xử lý nữa có mức độ ưu tiên cao hơn so với Block_Double_Threat;.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo