Cách chính xác để lên mạng ngẫu nhiên


9

Tôi đang tạo một trò chơi RTS đơn giản từ trên xuống. Tôi lên kế hoạch cho nó "ngẫu nhiên" tạo ra các bản đồ khi tôi cần. Tôi dự định tất cả sẽ hoạt động trong 'lượt đi':

  1. Đổ đầy địa hình bằng tất cả cỏ
  2. Quay trở lại và thêm một số sỏi ngẫu nhiên
  3. Làm tròn sỏi
  4. Vẽ phong cảnh núi trên lớp thứ hai
  5. Vòng ra núi
  6. Vân vân.

Bây giờ, hãy xem bức ảnh này dưới đây:

nhập mô tả hình ảnh ở đây

Tôi đã tự tay tạo ra điều này bằng trình chỉnh sửa bản đồ của mình nhưng tôi dự định về cơ bản đây là kết quả sau khi hy vọng vượt qua / bước 3.

Làm thế nào tôi nên quyết định khi nào và được đặt sỏi của mình sao cho nó ít nhất có hình dạng bất thường và đủ lẻ tẻ để trông tự nhiên?

Cảm ơn nếu bạn có thể! Bất kỳ và tất cả các trợ giúp được đánh giá cao!

Như một lưu ý phụ:

Mỗi lượt về cơ bản là tôi lặp qua tất cả các ô của tôi (Bản đồ được chia thành các ô 40x40) tương tự như sau:

for (int x = 0; x <= GRIDMAX - 1; x++) {
    for (int y = 0; y <= GRIDMAX - 1; y++) {
        //Terrain(x, y, 0) = SomethingHere;
    }
}

Câu trả lời:


5

Bạn có thể chơi xung quanh với Perlin Noise ( xem câu trả lời StackOverflow của tôi để triển khai ), để tạo bản đồ chiều cao. Từ bản đồ chiều cao, bạn có thể ánh xạ các phạm vi chiều cao nhất định đến các ô khác nhau. Cái gì đó như:

  • 20% tuyết hàng đầu
  • 20% sỏi tiếp theo
  • 40% cỏ tiếp theo
  • 20% nước cuối cùng

Bạn sẽ phải chơi với các giá trị của bộ tạo nhiễu Perlin để có được địa hình có thể được tạo và trông đẹp mắt.


5

Như những người khác đã nói, tiếng ồn perlin phải là một nguồn dữ liệu tốt để quyết định nơi đặt các loại gạch khác nhau. Tôi muốn bổ sung ý tưởng đó và liên kết hai tài nguyên bổ sung hữu ích với bước thứ ba trong danh sách kiểm tra của bạn - làm tròn các góc .

Đây là một quá trình được gọi là tự động ốp lát và nó không quá khó để thực hiện. Có nhiều cách khác nhau để làm điều đó, nhưng hầu hết chúng đều dựa vào việc tính toán thông tin kề nhau cho mỗi ô để quyết định đồ họa nào sẽ được vẽ ở vị trí đó.

Một cách rất hay để giải quyết vấn đề này là gán một giá trị cờ duy nhất cho mỗi hướng ô liền kề và bố trí spritehseet của bạn sao cho giá trị bạn nhận được bằng cách thêm tất cả các cờ liền kề của ô sẽ tương ứng với vị trí chính xác của gạch trong spritesheet. Đọc bài viết này để mô tả rất rõ ràng về kỹ thuật.

đây là một tài nguyên khác mô tả một biến thể khác của kỹ thuật.


Này, chỉ để cho bạn biết, câu trả lời của bạn cực kỳ hữu ích cho đến khi làm tròn các góc. Cảm ơn rất nhiều :) Nó thực sự tất cả bây giờ hoạt động (ngay cả các góc làm tròn)!
Freesnöw

4

Về cơ bản, bạn có thể sử dụng tạo tiếng ồn Perlin để tạo bản đồ của mình. Bạn sẽ lấy mẫu bản đồ chiều cao được tạo và gán các khối sỏi cho các phần của bản đồ có độ cao nhất định.

Dưới đây là một bài viết tham khảo tuyệt vời về cách thực hiện một hệ thống như vậy và các loại địa hình khác nhau mà bạn có thể tạo.

Các ví dụ có nhiều bước hơn bạn cần, nhưng khái niệm là như nhau.

Thông tin thêm về thể loại thế giới Minecraft

http://www.gamedev.net/blog/33/entry-2227887-more-on-minecraft-type-world-gen/

nhập mô tả hình ảnh ở đây

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.