2B ızgarada rastgele düşman yerleşimi


11

Eşyalarımı ve düşmanlarımı rastgele (veya olabildiğince rastgele) yerleştirmek istiyorum. Şu an XNA'nın Randomsınıfını X için 800 ile Y için 600 arasında bir sayı üretmek için kullanıyorum. Jeneratörü tohumlamıyorum, belki de dikkate alınması gereken bir şey.

2B ızgarada rastgele düşman yerleşimini geliştirebilecek başka teknikler var mı?


Bu soru biçimsiz görünüyor. Herhangi bir rastgele veri kaynağı kullanmadan işleri rastgele yerleştirmek mi istiyorsunuz? Bu bir çelişki. Aslında ne elde etmeye çalışıyorsunuz?
Andrew Russell

Bir min ve max arasında bir sayı oluşturmak için XNA'nın Random sınıfına güvenmek dışında herhangi bir teknik olup olmadığını bilmek istiyorum. Daha açık bir soru yapmaya çalışacağım
Robb 5

1
Bahsettiğiniz Random sınıfı, XNA'nın değil .NET çerçevesinin bir parçasıdır. Sadece fyi.
Michael Coleman

@Omnion - Farkındayım. Soruyu oluştururken biraz yorgundum;)
Robb

Yanıtlar:


16

Rastgele yerleştirme, göze yeterince rastgele gelmiyor. Muhtemelen düşmanların biraz daha eşit aralıklarla yerleştirilmesini isteyeceksiniz. Poisson disk örneklemesi hakkındaki bu makaleye göz atın veya mavi gürültü hakkında bilgi edinin.


7

Shawn Harg'i kurtarmaya hazırladı!

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

Rastgele bir dağılım düşündüğünüzde, gerçekten eşit dağılım anlamına gelir. Net'in Rastgele rastgele düşünüyor. Bunu halletmek için başka bir şeye ihtiyacınız var. İhtiyaçlarınız için mükemmel görünen Poisson disk örnekleme yöntemi amitp.


+1, kelimeleri ağzımdan çıkardı, dağıtım bile her zaman rastgele dağılımla karıştırılmış görünüyor (Ben de aynı hatayı yaptım)
Spooks

0

Aşağıdaki C # kodu sizin için bir dizi tekdüze nokta oluşturur:

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
}

Parametresiz Random () yapıcısını kullandığınızda, oluşturduğunuz Random nesnesinin zamana göre tohumlandığını unutmayın; bu nedenle, aramalar arasında çok az zaman geçmeden tekrar tekrar yapmadığınız sürece temelde rastgele olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.