Vị trí kẻ thù ngẫu nhiên trên lưới 2d


11

Tôi muốn đặt vật phẩm và kẻ thù của mình một cách ngẫu nhiên (hoặc ngẫu nhiên nhất có thể). Hiện tại tôi sử dụng Randomlớp của XNA để tạo ra một số từ 800 cho X đến 600 cho Y. Cảm giác như kẻ thù sinh ra nhiều hơn ở phía trên bản đồ hơn ở giữa hoặc dưới cùng. Tôi không chọn máy phát điện, có lẽ đó là điều cần xem xét.

Có các kỹ thuật khác được mô tả có thể cải thiện vị trí kẻ thù ngẫu nhiên trên lưới 2d không?


Câu hỏi này có vẻ không đúng. Bạn muốn đặt mọi thứ ngẫu nhiên, mà không sử dụng một nguồn dữ liệu ngẫu nhiên? Đó là một mâu thuẫn. Bạn thực sự đang cố gắng để đạt được điều gì?
Andrew Russell

Tôi muốn biết liệu có bất kỳ kỹ thuật nào ngoài việc dựa vào lớp Ngẫu nhiên của XNA để tạo ra một số giữa một phút và tối đa không. Tôi sẽ cố gắng đưa ra một câu hỏi rõ ràng hơn
Robb

1
Lớp Random mà bạn nói đến là một phần của .NET framework chứ không phải XNA. Chỉ cần fyi.
Michael Coleman

@Omnion - Tôi biết. Tôi đã hơi mệt khi tạo câu hỏi;)
Robb

Câu trả lời:


16

Vị trí ngẫu nhiên không nhìn đủ ngẫu nhiên để mắt. Có lẽ bạn sẽ muốn kẻ thù cách đều nhau hơn một chút. Hãy xem bài viết này về lấy mẫu đĩa Poisson, hoặc đọc về nhiễu xanh.


7

Shawn Hargreaves để giải cứu!

http://bloss.msdn.com/b/shawnhar/archive/2009/12/17/the-psychology-of-randomness.aspx http://bloss.msdn.com/b/shawnhar/archive/2010/09 /10/links-5-charles-bloom-on-randomness.aspx

Khi bạn nghĩ phân bổ ngẫu nhiên, bạn thực sự có nghĩa là phân phối. .Net's Random đang suy nghĩ ngẫu nhiên. Bạn cần một cái gì đó khác để thậm chí nó ra. Phương pháp lấy mẫu đĩa Poisson amitp được liên kết để trông hoàn hảo cho nhu cầu của bạn.


+1 đã lấy từ ngữ ra khỏi miệng tôi, thậm chí phân phối dường như được trộn lẫn với phân phối ngẫu nhiên mọi lúc (Bản thân tôi cũng mắc lỗi tương tự)
Spooks

0

Mã C # sau đây sẽ tạo ra một tập hợp các điểm thống nhất cho bạn:

Random rand = new Random(); // creates a new random number generator with a time-based seed
int X, Y;
for(int i = 0; i < numberOfPoints; i++)
{
  X = rand.Next(800); // generates a random int between 0 and 799, inclusive
  Y = rand.Next(600); // generates a random int between 0 and 599, inclusive
  AddPointToSet(X,Y); // write this method however you want
}

Lưu ý rằng khi bạn sử dụng hàm tạo Random () không có tham số, đối tượng Ngẫu nhiên bạn tạo sẽ được tạo hạt dựa trên thời gian, do đó, về cơ bản sẽ là ngẫu nhiên trừ khi bạn thực hiện liên tục với rất ít thời gian giữa các cuộc gọi.

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.