Có sự khác biệt đáng kể nào giữa việc sử dụng lưới hình vuông hoặc hình lục giác cho khu vực được tìm kiếm bằng thuật toán tìm đường không. Nói cách khác, là hình vuông hoặc hình lục giác tốt hơn, và nếu vậy tại sao.
Có sự khác biệt đáng kể nào giữa việc sử dụng lưới hình vuông hoặc hình lục giác cho khu vực được tìm kiếm bằng thuật toán tìm đường không. Nói cách khác, là hình vuông hoặc hình lục giác tốt hơn, và nếu vậy tại sao.
Câu trả lời:
Việc cân nhắc chính cho việc quyết định có nên sử dụng lưới vuông hay lưới hex không nên dễ dàng thực hiện AI - thuật toán tìm kiếm theo chiều rộng và chiều sâu đầu tiên khá giống nhau cho dù bạn có loại biểu đồ nào.
Thay vào đó, đây là một vấn đề về trò chơi nên được xem xét bởi các nhà thiết kế trò chơi. Các ô vuông có thể tiếp cận dễ dàng hơn với thị trường đại chúng (bảng hex có xu hướng trông "geeky") và trong thế giới điều khiển lên / xuống / trái / phải, điều hướng trực quan hơn các ô vuông so với các hình lục giác từ quan điểm UI. Lưới vuông cũng có xu hướng hạn chế di chuyển nhiều hơn một chút; giả sử chuyển động trực giao (và không phải đường chéo), phải mất 4 lần di chuyển để đi xung quanh chướng ngại vật một hình vuông, so với 3 lần di chuyển trong lưới lục giác. Từ quan điểm lập trình, các hình lục giác cũng dễ thực hiện hơn một chút nhưng không phải là về thuật toán tìm kiếm nhiều như lưới vuông bằng một mảng hai chiều, nhưng lưới hex không thực sự ánh xạ đến cấu trúc dữ liệu tiêu chuẩn.
Mặt trái của lưới vuông là chuyển động không bao giờ cảm thấy đúng. Di chuyển theo đường chéo nên lấy điểm chuyển động sqrt (2), nhưng trên thực tế, đó là 1 chuyển động (khiến cho cảm giác như đi trên đường chéo rất nhanh và hiếm khi có lý do để đi trực tiếp) hoặc đó là chuyển động 2 (khiến cho chuyển động chéo cảm thấy quá chậm ). Với lưới hex, khoảng cách di chuyển sẽ trực quan hơn rất nhiều, vì nó luôn có cùng khoảng cách từ hex này sang hex khác cho dù bạn đi theo con đường nào.
Tôi không phải là chuyên gia về AI, nhưng sự khác biệt không đáng kể. Các ô vuông nhanh hơn một chút (4 kết nối trên mỗi nút thay vì 6), nhưng đó thực sự không phải là yếu tố giới hạn trong thời gian chạy thuật toán. Tùy thuộc vào thuật toán bạn dự định sử dụng, mã có thể phức tạp hơn một chút đối với lưới hex, vì việc tính toán tọa độ phức tạp hơn một chút và việc sử dụng loại phím tắt tứ giác / octree khó hơn tôi tin là thường được sử dụng trong tìm đường.
Nhưng đối với một thế giới đơn giản như cấp độ trò chơi chiến lược theo lượt, sự khác biệt giữa hai bố cục không nên quan trọng lắm; một lưới vuông sẽ hơi đơn giản và nhanh hơn.
Hướng dẫn này về hình lục giác là tuyệt vời. Phần về tìm đường dẫn có một ví dụ tương tác và một số thông tin về cách tìm đường dẫn vuông.
Nếu bạn đang sử dụng tính năng tìm đường dựa trên đồ thị như thuật toán của A * hoặc Dijkstra hoặc Floyd-Warshall, thì việc tìm đường trên lưới hex không khác với tìm đường trên lưới vuông.
- Người hàng xóm. Mã mẫu tôi cung cấp trong hướng dẫn tìm đường dẫn gọi graph.neighbor để lấy hàng xóm của một vị trí. Sử dụng chức năng trong phần hàng xóm cho việc này. Lọc ra những người hàng xóm không thể vượt qua.
- Heuristic. Mã mẫu cho A * sử dụng hàm heuristic cung cấp khoảng cách giữa hai vị trí. Sử dụng công thức khoảng cách, thu nhỏ để phù hợp với chi phí di chuyển. Ví dụ: nếu chi phí di chuyển của bạn là 5 trên mỗi hex, thì nhân khoảng cách với 5.