Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zufälligen Levelgenerator (https://www.delphipraxis.net/110778-zufaelligen-levelgenerator.html)

.chicken 24. Mär 2008 17:55


Zufälligen Levelgenerator
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, hier kommt direkt noch ne Frage hinterher.

Also, ich arbeite grad an nem kleinen Raumschiffspiel. Ich häng es mal dran, damit ihr eine Vorstellung habt wie das aussieht.
Sinn ist einfach nur so weit wie möglich zu kommen.
Die zufällig generierten Level sehen allerdings noch sehr eintönig und simpel aus.

Wie würdet ihr einen Levelgenerator angehn mit folgenden Funktionen:
-Decke und Boden (ggnfalls auch nur eines oder keins von beidem, soll einstellbar sein)
-gewährleistung, dass immer ein Weg durch die Karte besteht
-freifliegende "Boxen" als hindernisse
-das ganze ansehnlich gestaltet (ala Worms!?)

Wie aufwendig ist sowas, wie geht man das an? Ich denke für viele von euch ist das ne ziemlich leichte Übung, deswegen würde ich gerne mal hören wie ihr sowas umsetzt.
Achja und dann noch eins: Ich setze das Spiel bisher ohne Andorra2D oder sonstige Unterstzuetzung um. Ist das auch bei komplizierteren Polygonen möglich, oder sorgt das für enorme Rechenleistung?
Ist die Performance zu verbessern wenn man statt eines Timers, das OnIdle Event nutzt? (hab da mal irgendwas aufgeschnappt...)

Grüße und hoffe ihr habt schöne Vorschläge :)

Edit: Achso es geht erstmal hier nicht um Grafiken und sowas, sondern nur um die reinen Formen. Es reicht mir erstmal in schwarz-weiss ^^

xy124 25. Mär 2008 07:26

Re: Zufälligen Levelgenerator
 
erstmal 2 fragen abn dich vor meiner Antwort:
hast du mit delphiX oder andorra gearbeitet?
und wie machst du die highscoreübertragung(ich bin auch grad dabei ein jump'n'run spiel zu machen und sowas würd ich auch gern einbauen)

so und zu deinem Leveleditor: ich würds so machen, das du einen Zufallswert für die Decke berechnest und dann die voreingestellte mindest höhe für den Boden addierst - du musst natürlich darauf achten, das die zufallswerte immer so gewählt sind, das sie auch "reinpassen".
als nächstes könntest du auch immer für die nächste Pixelsspalte sagen, das diese z.B. nur um wenige Pixel anders sein darf als die vorherige. Im endeffekt könnte so was funzen aussehen:
Delphi-Quellcode:
deckenpixel := random(clientheight-hohe)
fussbodenpixel := deckenpixel+hohe
// du kannst hier natürlich auich wieder mit zufall spielen:
fussbodenpixel := clientheight-(random(clientheight-hohe))
ach ja - wie steuert man dein spiel eigentlich?(die pfeiltasten schneinens nicht zu sein)

.chicken 25. Mär 2008 10:45

Re: Zufälligen Levelgenerator
 
Liste der Anhänge anzeigen (Anzahl: 1)
Aeh also erstmal zu den Highscores. Hab mirn ne PHP-Datei geschrieben, die den erreichten Score online in eine Textdatei schreibt und eine PHP-Datei die sie wieder abruft.
Dann werden die Werte anhand einer Trennsilbe getrennt und dann eingetragen.

So zum steuern. Wenn du die Maustaste klickst, steigt die Rakete ;-) blinkt unten rechts auch abundzu auf ^^


Dann zum Levelgenerator. So ungefähr mache ich es schon, dass ich zwei Bereiche habe, einen für die Decke und einen für den Boden in dem diese schwanken dürfen, und dann noch eine Maximale Höhe für die Boxen.
Das ist mir aber nich variabel genug...
Ich möchte aber auch nicht, dass Decke und Boden immer gleich aussehn... :-\

Es weiss doch sicher wer, wie genau zB der Worms Levelgenerator funktioniert oder? Ich häng mal Bilder an die verdeutlichen wie ich das gerne hätte ;-)
So, meint ihr das ist viel zu kompliziert und nicht umzusetzen?

OregonGhost 25. Mär 2008 11:34

Re: Zufälligen Levelgenerator
 
Ich würde grundsätzlich den Level in zwei Schritten generieren: Zunächst eine sehr grobe Unterteilung, die die Struktur das Levels vorgibt (zum Beispiel ein grobes Raster oder Polygone mit wenigen Ecken), und dann kannst du noch jede Menge Feinheiten dazu generieren, um mehr Abwechslung reinzubringen. Da du mindestes einen Pfad brauchst, der komplett durch geht, wäre ein Suchbegriff vielleicht Bei Google suchengenerate maze.

.chicken 25. Mär 2008 11:45

Re: Zufälligen Levelgenerator
 
Ok, die Idee mit grob zu fein gefällt mir sehr gut. Allerdings denke ich, dass ein Labyrinth nochmal was ganz anderes ist und auf ganz andere Weise konstruiert wird oder nicht? (Also zumindest nach den Sachen die ich mir da grad durchgelesen habe).

Mir fehlt jetzt also ein Algorithmus, um die groben Formen der Polygone zu bestimmen. Dabei sollten es nicht nur konvexe (wenn ich das richtig verstanden habe, sind das solche die nach aussen gewoelbt sind oder?) sein. Außerdem muss gewährleistet bleiben, dass immer ein bestimmter Bereich, dess Größe angegeben werden soll, frei bleibt.

Und ich brauche noch freifliegende Hindernisse, aber nur dann, wenn sie nicht zuviel des freien Platzes verdecken ^^

Für mich klingt das ziemlich kompliziert :P
Ich hatte shconmal drüber nachgedacht,einfach irgendwie die Decke und den Boden zu konstruieren und dann mit einem neuen Polygon einen Weg hinein zu "schneiden". Aber das ist sicherlich nicht sehr performant und ihr habt sicher bessere Vorschläge oder? ^^

Danke soweit

Edit: Bei Wikipedia habe ich nun gefunden, dass die Worms Level mithilfe von zufälligen Alpha-numerischen Strings erstellt wurden. Ich hab allerdings keine Ahnung wie das funktionieren soll :-\

BUG 25. Mär 2008 12:17

Re: Zufälligen Levelgenerator
 
Zitat:

Zitat von .chicken
Edit: Bei Wikipedia habe ich nun gefunden, dass die Worms Level mithilfe von zufälligen Alpha-numerischen Strings erstellt wurden. Ich hab allerdings keine Ahnung wie das funktionieren soll :-\

Ich glaube, daß wird nur als Seed für den Zufallszahlengenerator genommen, damit du dir gute Level immer wieder spielen kannst:
:arrow: gleicher Seed :arrow: gleiche Zufallszahlen :arrow: gleiches Level

MfG,
Bug

.chicken 25. Mär 2008 12:26

Re: Zufälligen Levelgenerator
 
Aso....hmm ok und hat nun wer ne Idee wie ich das ganze umsetze? ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz