Java - Perlin (Simplex) Noise 1D/2D mit Seed generieren (2D Spiel)?

1 Antwort

Ich hab' vor einiger Zeit etwas mit Rauschfunktionen herumgespielt. Der Code ist auf GitHub: https://github.com/Sogomn/Sogomn-engine/tree/master/Sogomn engine/src/de/sogomn/engine/noise
Die Klassen benutzen fast alle die Klasse "Vector". Die ist auch in dem Repository und eigentlich selbsterklärend. Kann man auch ohne umsetzen.

Bitte beachte, dass der Code nicht wirklich für Performance optimiert ist.

Naja, ich habe schon einfachere Methoden für Perlin Noise bzw. Perlin Simplex Noise gefunden und diese sind von der Performance her auch sehr gut, nur dass ich eben keinen Weg finde, einen zufälligen Seed darin einzubringen, sodass unterschiedliche Welten herauskommen, die mit demselben Seed auch immer exakt so wieder generiert werden.

Ich bräuchte eben ein Beispiel, wie man eine solche generierte Zahl (z.B. 11.223.344.556.677) in die Generierung einbindet. Bei den Versuchen, die ich mittlerweile alle aufgegeben habe, sind entweder zu starke Streuungen oder gleichbleibende Werte aufgetreten.

Trotzdem schon mal danke für das Angebot.

0

Java FX in Eclipse?

Ich wollte gerne Java FX ausprobieren, jedoch kann ich auf keine Funktion oder ähnliches zugreifen. (Diese werden rot unterstrichen und erscheinen nicht bei den Vorschlägen.)

...zur Frage

C++: Eigener "Zufallsgenerator"?

Achtung Anfänger am Werk:

Ich habe versucht einen eigenen "Zufallsgenerator" zu schreiben, dafür habe ich folgenden Code benutzt:

long time();
long random(long max, long seed = time());

//zählt welche Zahl bei 100 generierten Zufallszahlen wie oft vorkommt
int main() {...}

//liefert die aktuelle Zeit
long time() {...}

long random(long max, long seed) {
    
    return seed%max;
}

Wie zu erwarten waren die Ergebnisse zwar irgendwie zufällig jedoch nicht gleichmäßig verteilt, hier eine Beispielausgabe :

Zahl 0: 0mal | Zahl 1: 63mal | Zahl 2: 37mal | Zahl 3: 0mal | Zahl 4: 0mal

Danach wollte ich aber aus reiner Interesse wissen welcher Seed denn jeweils übermittelt wird und habe dem Code nur eine Zeile hinzugefügt:

long time();
long random(long max, long seed = time());

//zählt welche Zahl bei 100 generierten Zufallszahlen wie oft vorkommt
int main() {...}

//liefert die aktuelle Zeit
long time() {...}

long random(long max, long seed) {
    
    std::cout << seed << std::endl;

    return seed%max;
}

Und mit Verwunderung musste ich feststellen, dass die Werte nun relativ gleichmäßig verteilt ausgegeben wurden (nach den einzelnen Seeds natürlich), eine Beispielausgabe:

Zahl 0: 19 | Zahl 1: 24 | Zahl 2: 18 | Zahl 3: 20 | Zahl 4: 19

  • Warum sind die Werte beim 2. Codebeispiel gleichmäßiger verteilt?
  • Kann ich es irgendwie hinbekommen dass die Werte so verteilt sind wie im 2. Codebeispiel, ohne dabei etwas in der Konsole ausgeben zu müssen?

PS. Ich dachte dass die bessere Verteilung im 2. Codebeispiel möglicherweise damit zusammenhängt, dass der cout-Befehl eine gewisse Zeit beansprucht, und somit die Seeds indirekt beeinflusst. Deshalb habe ich versucht an der selben Stelle wo im 2. Beispiel der cout-Befehl steht eine kurze Wartezeit einzubauen, jedoch war das Ergebnis ähnlich wie beim 1. Beispiel.

...zur Frage

LibGDX - Wie generiert man eine Welt (2D) einmalig?

Hallo Leute.

Ich hatte bereits mehrfach wegen LibGDX gefragt, allerdings nie eine richtige Antwort bekommen. Darum erkläre ich es hier kurz einfacher:

Ich bin gerade dabei, ein 2D Spiel in LibGDX, also Java (Eclipse) zu programmieren. Dafür habe ich bereits Blocktexturen erstellt und auf dem Bildschirm generieren lassen.

Das Problem ist aber, dass sich der "GameScreen" ja immer wieder updatet und somit bei einer zufallsgenerierten Welt alles durcheinander fliegt. Ich finde aber auch keine andere Lösung, um dieses Problem selbst zu beheben.

Wenn jemand sich wirklich damit auskennt und bitte auch wirklich NUR Leute, die sich damit auskennen: Wie lässt man etwas nur EINMALIG generieren, also möglichst außerhalb der batch.draw()-Schleife? Bedeutet, die Welt verändert sich nicht mehr, nachdem sie generiert wurde. (Falls Quellcode nötig ist, sollte bei meinen letzten 2 Fragen etwas dabei sein)

Und falls es noch jemand weiß: Wie könnte man eine Welt generieren, die über den Bildschirm hinaus geht bzw. wie generiert man die Welt weiter, wenn man aus dem Bildschirm läuft und die Kamera sozusagen "mitzieht"?

Ich würde mich freuen, wenn wenigstens eins der beiden Probleme gelöst wird, am Liebsten natürlich das Hauptproblem mit dem einmaligen generieren. Wenn jemand antwortet, würde ich auch darum bitten, bei Antworten meinerseits auch zu reagieren und nicht direkt das Thema zu vergessen und als "erledigt" anzusehen.

MfG xSh4kerx

...zur Frage

Warum funktioniert dieser Java-Code nicht, wenn ich ihn ausführe?

package love;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import love.Var;

public class KeyHandler implements KeyListener {
  
  static int tempKeyHandler = 0;

  static int escape = 0, escape2 = 0;

  @Override
  public void keyPressed(KeyEvent f) {
    if (f.getKeyCode() == KeyEvent.VK_ESCAPE) {
      if (escape == 0) {
        Var.pause = true;
        Var.imSpiel = false;
        Var.nimSpiel = false;
        Var.himSpiel = false;
        escape--;
        escape2++;
      }

      if (escape2 >= 1) {
        Var.pause = false;
        Var.imSpiel = true;
        Var.nimSpiel = false;
        Var.himSpiel = false;
        escape = 0;
      }

      System.out.println(KeyHandler.escape);
      System.out.println(Var.imSpiel + " + " + Var.himSpiel + " + " + Var.nimSpiel + " + " + Var.pause);
    }
  }
}
...zur Frage

Welche Programmiersprache/Tool brauche ich?

Hey, ich würde gerne einen Charakter-Editor, der auf einer Website einbindbar ist, nutzen. Für diesen sollte Mann/Frau unterscheidbar sein und ansonsten erst einmal nur Größe/ Dickleibigkeit verändert werden können (später Kleidung des Charakters wechseln). Außerdem wäre es cool, wenn der Charakter dreidimensional wäre, und man ihn mit der Maus beliebig drehen kann(auch gerne eine 2D Lösung vorschlagen). Welche Tools(Programmiersprachen, Programme, usw.) eignen sich dafür, eine (möglichst simple) Lösung zu finden? Gibt es bereits Tutorials, Code oder Ähnliches für dieses Problem?

Ich freue mich auf jede Information, danke schon einmal im Voraus!!

...zur Frage

Welcher Webeditor ist kostenlos und auf dem aktuellem Stand (Html 5)?

Hi,

benutzte den Webeditor Scriptly, damit habe ich auch meine erste Website erstellt. Kommt mit dem ganz gut klar, allerdings merkt man schon wenn man nach Html 5 Standard arbeitet dass es manchmal probleme gibt. Also z.B. ist bei den meta-tags immer zum schluss der Slash/ mit dran wenn man den wegläßt zeigt er es gleich als Fehler an. Und utf-8 funktioniert manchmal auch net so recht. Letztens habe ich den NVU ausprobiert aber der gefällt mir net, man kann zwar den code automatisch generieren lassen aber das möchte ich net.

Gibt es einen guten kostenlosen Webeditor, der etwas moderner ist wie Scriptly und den man sowohl privat als auch gewerblich nutzen kann? Wer hat damit Erfahrungen gemacht.

Danke

...zur Frage

Was möchtest Du wissen?