Hãy tưởng tượng một trò bắn súng rất đơn giản, một điều mà tất cả chúng ta đều biết:
Bạn là người chơi (màu xanh lá cây). Chuyển động của bạn bị giới hạn trong X
trục. Kẻ thù của chúng ta (hoặc kẻ thù) ở trên cùng của màn hình, chuyển động của anh ta cũng bị hạn chế theo X
trục. Người chơi bắn đạn (màu vàng) vào kẻ thù.
Tôi muốn triển khai AI cho kẻ thù thực sự giỏi trong việc tránh đạn của người chơi. Ý tưởng đầu tiên của tôi là chia màn hình thành các phần riêng biệt và gán trọng lượng cho chúng:
Có hai trọng lượng: "Trọng lượng viên đạn" (màu xám) là mối nguy hiểm do viên đạn gây ra. Đạn càng gần kẻ thù, "trọng lượng đạn" càng cao ( 0..1
trong đó 1 là nguy hiểm cao nhất). Làn đường không có viên đạn có trọng lượng 0. Trọng lượng thứ hai là "trọng lượng khoảng cách" (màu xanh lá cây vôi). Đối với mỗi làn đường tôi thêm 0.2
chi phí di chuyển (giá trị này hiện tại tùy ý và có thể được điều chỉnh).
Sau đó, tôi chỉ cần thêm trọng lượng (màu trắng) và đi đến làn đường có trọng lượng thấp nhất (màu đỏ). Nhưng cách tiếp cận này có một lỗ hổng rõ ràng, bởi vì nó có thể dễ dàng bỏ lỡ cực tiểu cục bộ vì vị trí tối ưu để đi sẽ chỉ đơn giản là giữa hai viên đạn đến (như được biểu thị bằng mũi tên trắng).
Vì vậy, đây là những gì tôi đang tìm kiếm:
- Nên tìm cách vượt qua cơn bão đạn, ngay cả khi không có nơi nào không áp đặt mối đe dọa của viên đạn.
- Kẻ thù có thể tránh đạn một cách đáng tin cậy bằng cách chọn một giải pháp tối ưu (hoặc gần như tối ưu).
- Thuật toán sẽ có thể tính đến tốc độ di chuyển của viên đạn (vì chúng có thể di chuyển với các vận tốc khác nhau).
- Các cách điều chỉnh thuật toán sao cho có thể áp dụng các mức độ khó khác nhau (câm cho kẻ thù siêu thông minh).
- Thuật toán sẽ cho phép các mục tiêu khác nhau, vì kẻ thù không chỉ muốn tránh đạn, anh ta cũng có thể bắn người chơi. Điều đó có nghĩa là các vị trí mà kẻ thù có thể bắn vào người chơi nên được ưu tiên khi né đạn.
Vì vậy, làm thế nào bạn sẽ giải quyết điều này? Trái ngược với các game khác thuộc thể loại này, tôi chỉ muốn có một vài kẻ thù nhưng rất "lành nghề" thay vì hàng loạt kẻ thù câm.