Zufällige Platzierung des Feindes auf einem 2D-Gitter

11

Ich möchte meine Gegenstände und Feinde zufällig (oder so zufällig wie möglich) platzieren. Im Moment benutze ich die XNA- RandomKlasse, um eine Zahl zwischen 800 für X und 600 für Y zu generieren. Es fühlt sich an, als würden Feinde mehr oben auf der Karte als in der Mitte oder unten erscheinen. Ich säe den Generator nicht, vielleicht ist das etwas zu beachten.

Gibt es andere beschriebene Techniken, die die zufällige Platzierung von Feinden auf einem 2D-Gitter verbessern können?

Robb
quelle
Diese Frage scheint falsch zu sein. Sie möchten Dinge zufällig platzieren, ohne eine Quelle für zufällige Daten zu verwenden? Das ist ein Widerspruch. Was versuchst du eigentlich zu erreichen?
Andrew Russell
Ich würde gerne wissen, ob es andere Techniken gibt, als sich auf die Zufallsklasse von XNA zu verlassen, um eine Zahl zwischen min und max zu generieren. Ich werde versuchen, eine klarere Frage zu stellen
Robb
1
Die Zufallsklasse, über die Sie sprechen, ist Teil des .NET-Frameworks und nicht von XNA. Nur zu deiner Information.
Michael Coleman
@ Omnion - Ich bin mir bewusst. Ich war ein bisschen müde, als ich die Frage erstellt habe;)
Robb

Antworten:

16

Die zufällige Platzierung sieht für das Auge nicht zufällig genug aus. Sie werden wahrscheinlich wollen, dass die Feinde etwas gleichmäßiger verteilt sind. Schauen Sie sich diesen Artikel über Poisson-Disk-Sampling an oder lesen Sie mehr über blaues Rauschen.

amitp
quelle
7

Shawn Hargreaves zur Rettung!

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

Wenn Sie an zufällige Verteilung denken, meinen Sie wirklich eine gleichmäßige Verteilung. .Net's Random denkt zufällig. Sie brauchen etwas anderes, um es auszugleichen. Die Poisson-Disk-Sampling-Methode amitp, mit der verknüpft ist, passt perfekt zu Ihren Anforderungen.

Cubed2D
quelle
+1 nahm die Wörter direkt aus meinem Mund, gleichmäßige Verteilung scheint die ganze Zeit mit zufälliger Verteilung gemischt zu sein (ich selbst habe den gleichen Fehler gemacht)
Spooks
0

Der folgende C # -Code generiert eine Reihe einheitlicher Punkte für Sie:

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
}

Beachten Sie, dass, wenn Sie den Random () -Konstruktor ohne Parameter verwenden, das von Ihnen erstellte Random-Objekt basierend auf der Zeit festgelegt wird. Es ist also im Wesentlichen zufällig, es sei denn, Sie führen es wiederholt mit sehr wenig Zeit zwischen den Aufrufen aus.

James King
quelle