Vì vậy, tôi đã tạo ra trò chơi java 2D từ trên xuống trong khung này có tên là Greenfoot và tôi đã làm việc về AI cho những kẻ mà bạn sẽ chiến đấu. Tôi muốn chúng có thể di chuyển khắp thế giới một cách thực tế để tôi sớm nhận ra, trong số một vài điều khác, tôi sẽ cần một số cách tìm đường.
Tôi đã thực hiện hai nguyên mẫu A *. Một là dựa trên lưới và sau đó tôi đã tạo một cái hoạt động với các điểm mốc, vì vậy bây giờ tôi cần tìm cách chuyển từ "bản đồ" 2 chướng ngại vật / tòa nhà sang biểu đồ các nút mà tôi có thể tạo đường dẫn từ đó. Tính năng tìm đường thực tế có vẻ ổn, chỉ các danh sách mở và đóng của tôi có thể sử dụng cấu trúc dữ liệu hiệu quả hơn, nhưng tôi sẽ làm được điều đó nếu và khi tôi cần.
Tôi dự định sử dụng lưới điều hướng cho tất cả các lý do được nêu trong bài đăng này trên ai-blog.net . Tuy nhiên, vấn đề tôi gặp phải là những gì A * nghĩ là con đường ngắn nhất từ trung tâm / cạnh đa giác không nhất thiết là con đường ngắn nhất nếu bạn đi qua bất kỳ phần nào của nút. Để có được một ý tưởng tốt hơn, bạn có thể xem câu hỏi tôi đã hỏi trên stackoverflow .
Tôi đã có một câu trả lời tốt liên quan đến một biểu đồ tầm nhìn. Tôi đã mua cuốn sách ( Hình học tính toán: Thuật toán và ứng dụng ) và đọc thêm về chủ đề này, tuy nhiên tôi vẫn ủng hộ một mạng lưới điều hướng (Xem phần " Quản lý độ phức tạp " từ Ghi chú của Amit về Tìm kiếm đường dẫn ). (Như một lưu ý phụ, có lẽ tôi có thể có thể sử dụng Theta * để chuyển đổi nhiều điểm tham chiếu thành một đường thẳng nếu đầu tiên và cuối cùng không bị che khuất. Hoặc mỗi lần tôi di chuyển trở lại kiểm tra đến điểm dừng trước khi cuối cùng để xem liệu tôi có thể đi thẳng từ cái này
Vì vậy, về cơ bản những gì tôi muốn là một lưới điều hướng trong đó một khi tôi đã đặt nó thông qua thuật toán phễu (ví dụ: cái này từ Digesting Duck ) tôi sẽ nhận được đường dẫn ngắn nhất thực sự, thay vì chỉ có một đường dẫn ngắn nhất theo nút đến nút, nhưng không phải là ngắn nhất thực tế mà bạn có thể đi qua một số đa giác và bỏ qua các nút / cạnh.
Oh và tôi cũng muốn biết làm thế nào bạn đề nghị lưu trữ thông tin liên quan đến đa giác. Đối với ví dụ nguyên mẫu điểm tham chiếu mà tôi đã tạo, tôi chỉ có mỗi nút là một đối tượng và lưu trữ một danh sách tất cả các nút khác mà bạn có thể di chuyển đến từ nút đó, tôi đoán rằng nó sẽ không hoạt động với đa giác? và làm thế nào để tôi biết nếu một đa giác là mở / di chuyển ngang hoặc nếu nó là một vật thể rắn? Làm thế nào để tôi lưu trữ các nút tạo nên đa giác?
Cuối cùng, đối với hồ sơ: Tôi muốn tự mình lập trình điều này từ đầu mặc dù đã có sẵn các giải pháp khác và tôi không có ý định sử dụng mã này trong bất kỳ điều gì khác ngoài trò chơi này nên không vấn đề gì nó chắc chắn sẽ có chất lượng kém.