Posizionamento casuale del nemico su una griglia 2d


11

Voglio posizionare i miei oggetti e nemici in modo casuale (o nel modo più casuale possibile). Al momento uso la Randomclasse di XNA per generare un numero compreso tra 800 per X e 600 per Y. Sembra che i nemici si generino più verso la cima della mappa che al centro o in basso. Non semino il generatore, forse è qualcosa da considerare.

Ci sono altre tecniche descritte che possono migliorare il posizionamento casuale dei nemici su una griglia 2d?


Questa domanda sembra malformata. Vuoi posizionare le cose in modo casuale, senza utilizzare una fonte di dati casuali? Questa è una contraddizione. Cosa stai effettivamente cercando di ottenere?
Andrew Russell,

Vorrei sapere se esistono altre tecniche oltre a fare affidamento sulla classe casuale di XNA per generare un numero compreso tra un minimo e un massimo. Proverò a fare una domanda più chiara
Robb,

1
La classe casuale di cui stai parlando fa parte del framework .NET, non XNA. Fyi.
Michael Coleman,

@Omnion - Sono consapevole. Ero un po 'stanco quando ho creato la domanda;)
Robb,

Risposte:


16

Il posizionamento casuale non sembra abbastanza casuale alla vista. Probabilmente vorrai che i nemici siano distanziati un po 'più uniformemente. Dai un'occhiata a questo articolo sul campionamento del disco di Poisson o leggi sul rumore blu.


7

Shawn Hargreaves in soccorso!

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

Quando pensi a una distribuzione casuale, intendi davvero una distribuzione uniforme. .Net's Random pensa in modo casuale. Hai bisogno di qualcos'altro per uniformarlo. Il metodo di campionamento del disco Poisson amitp collegato a sembra perfetto per le tue esigenze.


Il +1 ha tolto le parole dalla mia bocca, anche la distribuzione sembra mescolarsi continuamente con la distribuzione casuale (io stesso ho fatto lo stesso errore)
Spooks

0

Il seguente codice C # genererà una serie di punti uniformi per te:

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
}

Nota che quando usi il costruttore Random () senza parametri, l'oggetto Casuale che crei viene seminato in base al tempo, quindi sarà essenzialmente casuale a meno che tu non lo faccia ripetutamente con pochissimo tempo tra le chiamate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.