Một bản đồ đơn giản, bốn quần xã và cách phân phối chúng


16

Đây là ý tưởng cơ bản: Tôi đã có một trò chơi Rogue-ish, có lẽ là Pháo đài Lùn, với một thế giới được tạo ngẫu nhiên và một số lối vào ngục tối nằm rải rác xung quanh nó. Tôi đã có các hầm ngục cơ bản được bảo hiểm, nhưng tôi bị mắc kẹt trên một khía cạnh của thế giới.

Thế giới nói, được coi là bản đồ 2D của màn hình, nên có sự phân phối có lẽ giống như blob của bốn chủ đề hoặc quần xã sinh vật khác nhau - đồng cỏ, sa mạc, tuyết và đầm lầy, mỗi vùng có tổng số màn hình riêng. Giả sử bản đồ là 8x8, cung cấp 64 màn hình độc đáo. Một nửa trong số đó có thể là đồng cỏ, một phần tư sa mạc, và đầm lầy và tuyết mỗi phần tư:

mockup của một bản đồ thế giới có thể với các thị trấn và vị trí bắt đầu, nhưng không có lối vào ngục tối

Có vẻ như bảng màu giảm đã làm cho tuyết có màu giống như đầm lầy. Ban đầu, có tám màn hình tuyết ở góc dưới cùng, và một khu vực đầm lầy tám màn hình hơi ở giữa. Xin lỗi vì điều đó và xin vui lòng bỏ qua các điểm đánh dấu vị trí.

Điều tốt nhất tôi có thể nhận được là một số hình dạng rắn, và thường là đủ với các kết hợp vô nghĩa như sa mạc rắn qua tuyết (hoặc ngược lại). Đối với cuộc sống của tôi, tôi không thể tìm ra làm thế nào để nó trở nên đẹp đẽ và hấp dẫn, chứ đừng nói đến việc nó có ý nghĩa về khí hậu (?). Vậy làm thế nào để tôi tạo ra một bản đồ quần xã như trong mockup?

Được rồi, theo yêu cầu: thế giới thực sự không lớn hơn nhiều so với ví dụ đó, và điều tôi cần chỉ là một cách để lan truyền một số đốm xác định sự xuất hiện theo chủ đề, với giới hạn thêm rằng tuyết không thể chạm vào sa mạc. Màn hình không cuộn và nếu màn hình được đặt thành "sa mạc", sẽ không có cỏ ở bất cứ đâu trên đó.


Bạn có sẵn sàng sử dụng các thư viện của bên thứ ba, hoặc bạn muốn mã hóa giải pháp của riêng mình?
William Mariager

Tôi muốn thích mã hóa của riêng tôi.
Kawa

Các kích thước quần xã được cố định?
kaoD

Bạn có thể chỉnh sửa bài đăng với một danh sách điểm của các quy tắc chính xác mà bạn muốn tạo bản đồ theo không? Chúng ta sẽ dễ dàng hơn để giải quyết vấn đề khi biết chính xác những gì chúng ta sẽ làm.
William Mariager

Đã chỉnh sửa, và kích thước quần xã, ví dụ, tôi đã đi với những người đó. Đối với một thế giới 16x16, Sa mạc vẫn có thể là một phần tư của khu vực, v.v., nhưng điều đó chủ yếu là để đảm bảo các khu vực nhất định sẽ ở đó.
Kawa

Câu trả lời:


8

Có nhiều cách để lột da con mèo này, tuy nhiên một trong những điều thú vị hơn là sử dụng automata di động . Bắt đầu với lưới trống của bạn và thêm một vài ô bắt đầu ở các vị trí ngẫu nhiên. Chúng nên là một số loại quần xã sinh vật không hỗn hợp cơ bản. Nói: Cỏ, Sa mạc, Tuyết, Dương.

Dựa trên các quy tắc tăng trưởng của thiết kế của riêng bạn, có thể có một số tính ngẫu nhiên (tôi không quan tâm rằng nó phá vỡ ý tưởng về CA về mặt kỹ thuật, phải không?) Chúng đã phát triển từng bước trên bản đồ. Các quy tắc bổ sung có thể như vậy nếu bạn là đại dương và bên cạnh cỏ hoặc đầm lầy, bạn có thể biến thành đầm lầy. Nếu bạn ở bên cạnh tuyết, bạn có thể trở thành băng, nếu bạn ở gần sa mạc, bạn cũng có thể bị khô và cũng trở thành sa mạc.

Điều tương tự cũng có thể đúng đối với các hỗn hợp khác, và trên lý thuyết, ngay cả các hỗn hợp phụ như đầm lầy băng giá, hay lãnh nguyên, hoặc rừng rậm mọc lên từ những khu rừng rộng lớn mọc lên từ những đồng cỏ rộng lớn.

Các khả năng là vô tận, và cũng có thể liên tục. Vì các quy tắc này đều đơn giản, bạn có thể thực hiện các môi trường thay đổi theo thời gian. Kết hợp với thông tin về chiều cao và các quy tắc có tính đến nó, bạn có thể trồng hồ và sông, ngăn chặn sự phát triển của rừng trên núi và những thứ lạ mắt khác.

Bản đồ chiều cao đó có thể là kết quả của nhiễu perlin, hoặc hình vuông kim cương hoặc thậm chí toàn bộ các mô hình CA khác. Trên thực tế, bạn có thể sửa đổi bản đồ đó khi thời gian trôi qua bằng cách lập mô hình kiến ​​tạo mảng, đẩy núi lên, chìm trong rãnh và thậm chí để các dòng sông hạ thấp cảnh quan tạo ra hẻm núi.

Lỗ thỏ này kéo dài mãi mãi.


Nâng cao cho đề xuất CA. Nó phù hợp với nhận xét của Valmond.
Kawa

Bạn sẽ ngạc nhiên khi một giải pháp CA đơn giản có thể giải quyết vấn đề này. Các quy tắc đơn giản và bản đồ bắt đầu ngẫu nhiên có thể tạo ra các cảnh quan trông rất chi tiết và 'thực tế'.
DampeS8N

Đã đi với nguyên tắc CA. Điều đó vẫn chưa hoàn toàn đúng vì điều duy nhất ngăn cách sa mạc và tuyết là một số quy tắc vị trí tuyệt đối, nhưng hiện tại nó vẫn độc đáo.
Kawa

1
Một giải pháp tùy chọn cho vấn đề tuyết / sa mạc là có một quy tắc để tạo ra một loại quần xã sinh vật khác, nơi tuyết gặp sa mạc. Nói, đầm lầy. Sau đó đầm lầy có thể tiếp tục phát triển như bình thường. Bạn vẫn có thể có biên giới tuyết / sa mạc, nhưng thực tế điều đó hơi tự nhiên. Trên thực tế, hầu hết sa mạc trên trái đất được bao phủ trong tuyết. - nói tóm lại, tuyết có thể có quy tắc sao cho nếu bất kỳ người hàng xóm nào là sa mạc, nó sẽ biến thành đầm lầy.
DampeS8N

11

Câu trả lời ngắn gọn nhưng bạn thực sự nên kiểm tra bài viết này - www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/ Nó giải thích một thuật toán về việc tạo ra vùng đất khô và quần xã ngẫu nhiên dựa trên khu vực độ ẩm được chỉ định và khu vực độ cao. Nhưng trong trường hợp của bạn, chỉ cần đặt giá trị của riêng bạn cho phân phối mà bạn muốn.

(chỉnh sửa lớn) Tôi sẽ làm cho điều này rõ ràng hơn nhiều cho những khái niệm tạo bản đồ mà bạn cần áp dụng. Sử dụng hệ tọa độ với 1 đơn vị trên mỗi màn hình, trong các giá trị dấu phẩy động. Tạo một tập hợp điểm ngẫu nhiên nhỏ trong các tọa độ này, như thể bạn đang tạo một sơ đồ Voronoi nhưng chúng tôi sẽ không thực sự tạo ra các hình dạng ngẫu nhiên. Thay vào đó, sơ đồ sẽ được ngụ ý và xấp xỉ bởi bản đồ sau khi các quần xã được thiết lập.

Mỗi điểm là trung tâm cho mỗi khu vực quần xã. Đặt quy tắc của riêng bạn để liên kết một điểm với một quần xã. Chẳng hạn, nếu bạn muốn có một sa mạc ở phía đông và không quá xa về phía nam hoặc phía bắc, tất cả các điểm lớn hơn một giá trị X nhất định và trong phạm vi Y nhất định sẽ có sa mạc bao quanh chúng.

Liên kết mỗi màn hình với một trong những điểm này, được thực hiện bằng cách lấy tâm của màn hình theo tọa độ XY (giả sử 4.5, 8.5) và trả lại điểm gần nhất với tâm của màn hình.

Đây là bản vẽ sơ bộ của sơ đồ hình dạng trên lưới màn hình. Chúng tôi không thực sự quan tâm đến các đường bao quanh các hình dạng, nhưng chúng ở đó để minh họa cách các màn hình bắt đầu gần đúng các vùng hình dạng.

Lưới Voronoi

Lặp lại cho mỗi màn hình, cung cấp cho mỗi người một quần xã riêng.


Tôi đã từng thấy cái đó trước đây và nó hơi quá so với khẩu vị của tôi.
Kawa

Vâng, đó là đặt nó nhẹ. Nó rất bazooka-on-a-muỗi. Ví dụ 8x8 không chỉ là một ví dụ - thế giới thực sự sẽ không đủ lớn để biện minh cho giải pháp đó.
Kawa

Được rồi, tôi thấy bây giờ. Bạn thực sự không cần phân biệt quần xã sinh vật với từng ô trên bản đồ. Ngoài ra, khái niệm đề xuất của bài viết có vẻ phù hợp với tác giả nhưng một số phần có thể được chọn ra. Tôi đang chỉnh sửa câu trả lời của mình để làm cho nó rõ ràng hơn.
ChrisC

Vẫn còn một giải pháp quá phức tạp. Không có chiều cao hoặc độ ẩm để sử dụng ở đây. Tất cả những gì tôi cần, tất cả những gì tôi muốn hỏi là một cách nào đó để loại "đốm" sa mạc, đầm lầy và tuyết lên đến số lượng cần thiết, tuân theo một số quy tắc bổ sung như "tuyết không thể đến quá gần sa mạc" .
Kawa

@Kawa: Có vẻ như bạn đã sẵn sàng để tìm hiểu và viết giải pháp của riêng mình! Từ những gì tôi có thể nói, bạn đã có tất cả hình dung trong tâm trí mình, chỉ cần LÀM NÓ! :) Hãy nhớ rằng nó không phải là công cụ tạo bản đồ cuối cùng trên thế giới, miễn là nó BẤT NGỜ như thế. ;)
Zolomon

1

Trả lời 1:

trồng tuyết và sa mạc, khi điều đó được thực hiện, tìm kiếm các giao lộ (bị cấm) và phát triển (ít nhiều lớn hơn) đầm lầy ở đó.

Rince và lặp lại.

Trả lời 2:

Đối với phần 'blob', tôi đã chuyển nhận xét của mình (theo yêu cầu) vào bài đăng:

Nếu bạn phát triển xung quanh bằng cách lặp, tức là. đặt ra 1 điểm sa mạc và sau đó mọc ngẫu nhiên xung quanh bất kỳ điểm sa mạc nào (mỗi lần lấy ngẫu nhiên một trong những điểm sa mạc hiện có và thêm 1 điểm vào một trong hai phía của nó (nơi chưa có gì)) thì bạn sẽ có được hiệu ứng blobby ( không có hàng dài chẳng hạn).

Bạn cũng có thể thêm một quy tắc để bạn không thể tạo một lát sa mạc nếu có tuyết trên bất kỳ ô nào gần đó.


Điều đó không chính xác giúp với khía cạnh blobby của vấn đề.
Kawa

2
nếu bạn phát triển xung quanh bằng cách lặp, tức là. đặt ra 1 điểm sa mạc và sau đó mọc ngẫu nhiên xung quanh bất kỳ điểm sa mạc nào (mỗi lần lấy ngẫu nhiên một trong những điểm sa mạc hiện có và thêm 1 điểm vào một trong hai phía của nó (nơi chưa có gì)) thì bạn sẽ có được hiệu ứng blobby ( không có hàng dài chẳng hạn).
Valmond

bạn cũng có thể thêm một quy tắc để bạn không thể tạo một lát gạch sa mạc nếu có tuyết trên bất kỳ ô nào gần đó.
Valmond

Valmond, đặt nó trong một câu trả lời.
Kawa
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.