Là lưới vuông hoặc hex tốt hơn cho tìm đường?


16

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.


4
Methinks bạn nên sử dụng bất cứ điều gì phù hợp với lối chơi của bạn;)
Andrew Russell

Câu trả lời:


18

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.


3
+1. Đây là một quyết định thiết kế, không phải là một quyết định AI. Nếu bạn muốn có lưới hình lục giác, một lưới hình vuông bù như www-cs-students.stanford.edu/~amitp/game-programming/grids/, có thể ít đáng sợ hơn đối với người chơi thông thường và về mặt toán học tương đương với hình lục giác. Ngoài ra, nó cũng là một đại diện trong bộ nhớ thuận tiện.

2
+1 cho câu "Lưới vuông dễ tiếp cận hơn với thị trường đại chúng (bảng hex có xu hướng trông" geeky ")": D
Kornel Kisielewicz

Edwin không hỏi những gì tốt hơn trên một trò chơi dựa trên lưới. Ông đang hỏi điều gì tốt hơn cho AI sử dụng hình vuông hoặc hình lục giác. Bản thân thế giới và trò chơi không cần phải gò bó với những thứ đó, chỉ có những nút mà AI đang tìm kiếm.
Tấn côngHobo

Tôi đã triển khai các trò chơi chiến lược theo lượt với cả lưới hex và vuông, và hoàn toàn không có sự khác biệt cần thiết nào về độ phức tạp của đường dẫn. Tôi thậm chí đã chuyển một trò chơi từ bản đồ lục giác sang bản đồ vuông và (ngoài kết xuất), thay đổi duy nhất tôi phải thực hiện là phương pháp MapLocation :: GetDistance () tính khoảng cách giữa hai khu vực. Tôi chỉ đơn giản là phải điều chỉnh các tính toán để đối phó với mọi hàng khác được bù nhẹ. Trong cả hai trường hợp, bạn có thể sử dụng cùng một biểu diễn trong bộ nhớ. Vì vậy, như những người khác đã nói, nó thực sự là một vấn đề thiết kế.
Mike Strobel

4
Chỉ cần một bên, các hình lục giác có thể được ánh xạ tới một mảng 2 chiều. Hình ảnh một lưới vuông, sau đó thay đổi mỗi cột xuống một nửa bước. Bây giờ bạn đã có một lưới vuông bù, nó là đẳng cấu với lưới hex.
Asmor

3

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.


5
"Lưới vuông nhanh hơn một chút (4 kết nối trên mỗi nút thay vì 6)" - trừ khi bạn có thể di chuyển dọc theo các đường chéo, trong trường hợp đó là 8 kết nối so với 6.
Ian Schreiber

Chạm vào. Bạn hoàn toàn đúng; tất nhiên các kết nối đường chéo sẽ có khả năng.
Gregory Avery-Weir

3

Có một sự khác biệt thực tế tôi có thể nghĩ ra về kế hoạch đường đi. Di chuyển từ trung tâm của một ô lục giác sang trên các hàng xóm của nó luôn có cùng khoảng cách trong khi đó, nếu bạn cho phép di chuyển chéo, điều này không đúng với hình vuông.


0

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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.