• Mitspieler gesucht? Du willst dich locker mit der Community austauschen? Schau gerne auf unserem ComputerBase Discord vorbei!

realistische, schwere WiSim ?

Status
Für weitere Antworten geschlossen.
ja, da ist eben so ein bischen probieren gefragt bis was vernünftiges bei raus kommt.

Ansonsten meine Routine bitte nicht so weiterverwenden, da ist ein irres Ding drinne was mir erst jetzt auffällt das es drinne geblieben ist : es wird solange versucht randomisiert Strassen zu setzen bis etwas gefunden wurde.

Das ist natürlich ein miserabler Ansatz weil sich das Programm im Extremfall aufhängt oder nie eine Strasse platziert werden könnte.

Man müsste wohl eine Liste im Hintergrund führen die mögliche Startpunkte für eine neue Strasse verwaltet und von dort zufällig einen ziehen.


Aber sowas ist eben alles schwammig und zeigt sich erst bei oder gar nach der Umsetzung.
 
Hatte leider noch keine Zeit mir dein Algo genauer anzusehen. Hab nur mal drübergeschaut und versucht auf die Schnelle zu verstehen was passieren soll. Ist mir auch nicht aufgefallen.

Aufhängen ist natürlich nicht so witzig, aber das kann man, nein sollte man noch ändern.

Liste mit Startpkten kann ich jetzt nicht so ganz nachvollziehen, da hab ich doch das gleiche Problem wie bisher. Oder?
 
Man könnte sporadisch, z.b. jedes frame, ein Tile prüfen ob es sich eventuell mal später als strasse eignet und falls ja abspeichern.

Dann kann man, falls eine strasse gebaut werden muss/soll, sofort darauf zurückgreifen.

Die Zufallsmethode ist unschön, weil es unendlich lange dauern könnte und im zweifelsfalls die komplette Karte jedesmal abzusuchen wäre auch nicht besonders toll (mind. n² Komplexität)


Letztendlich ist das keine große Sache, aber das meinte ich damit : solche Problemstellungen fallen einem auf Anhieb beim Planen gar nicht ein.
 
Das Abspeichern, ob sich ein Tile als Straße eignet kommt dem Blockieren mit einem Marker gleich. Das hatte ich weiter oben schon mal vorgeschlagen. Wobei sich das Abspeichern als schwierig erweist, da die Überprüfung auf Mindestabstand wieder mehr Rechenleistung verlangt als das Blockieren bestimmter Tiles. Im weiteren Stadtaufbau würde es sich lohnen die Straßenenden zu speichern, da dann nur geprüft werden müßte ob man sie weiterführen kann. Da wäre Deine Lösung zeitsparender als die Methode mit dem Blockieren. Bis die Hälfte des Stadtfeldes gefüllt ist halte ich die Zufallsvariante für weniger Zeitkritisch.

Die Blockierung von bestimmten Tiles ist auch durch Wasser (See,Fluß, Meer) nötig und im Grunde sind die Häuser auch eine Art Blockierung.

Die beiden Methoden kombiniert würden es erlauben sowohl mitten in der Pampa Stadtgebiete entstehen zu lassen als auch das Problem lösen, wie man diese dann mit der Stadt verbindet. Hab gerade in deinem Code nachgeschaut wie du auf die Zufallsstraßen kommst. Im Grunde würde es reichen wenn man alle x mal diesen Zufallsbau aufrufen würde und ansonsten mit der Straßenweiterführung in Verbindung mit den blockierten Feldern arbeitet. Das solte den Zeitaufwand erheblich mindern.

Wo ich so darüber nachdenke fällt mir noch ein kleines Manko auf. Bei sehr großen Karten dürfte die Zufallsgenerierung zu einem eher Dörfischen Landleben führen. Bei 20 x 20 fällt das nicht weiter ins Gewicht. Da muß dann also auch noch ggengesteuert werden.

Ja du hast recht einige Dinge kann man nur erproben, aber in diesem Fall liegt das daran, daß wir nicht genau wissen wie man eine Stadt hübsch simulieren könnte. Die Abstraktion macht es so schwer die wir versuchen mal eben mit dem Zufall zu erschlagen, da ein reale Stadt wohl kaum durch Zufall wächst. Obwohl so theoretische Gedanken einen auch auf die eine oder andere Idee bringen. ;) Mag sein das mein Eindruck verfälscht ist, da du nun schon ein simple Stadtsimulation gebastelt hattest.
 
Was die Rechenzeit betrifft : ich bin ein Theoriefreund.
Für mich gibt es nur eine wahre Lösung und die lautet O(1).

Hier umgesetzt bedeutet das : meide Schleifen und wiederholungen wo immer es geht und versuche eine Lösung die mit 1 Schritt pro Durchlauf zurecht kommt.

Deswegen der Versuch mit dem markieren :

schematisch :

x++
if x>grenze -> x=0, y++
if feld(x,y) mögliche strasse -> markieren inc possible_roads, road_possible(possible roads)=1

und schon ist der Durchlauf beendet -> O(1)


Deswegen muss der Punkt ja nicht blockiert werden. Wenn zufällig dort ein haus entsteht (wie merken : es entstehen nur so Häuser das weiterhin Strassen setzbar bleiben) dann machen wir einfach nichts.

Wird nun später eine strasse gesetzt können wir einfach ein Objekt aus dem array nehmen und dieses nochmal auf seine strassenfähigkeit prüfen. Die chance ist hoch das es immer noch als strasse taugt und wenn nicht wird es halt eintrag 2 oder 3 usw, bis maximal n.


Warum mache ich das :
gut einmal bin ich es gewohnt, in hardware kann man sinnvoll immer nur einen Schritt pro Prozess und Takt bearbeiten.

Zum anderen aber spart es enorm viel Rechenzeit für Dinge die sich eben nicht so vereinfachen lassen. Etwa der Zeichenalgorithmus der wirklich alle n*n Felder pro Bild durchlaufen muss.



Das heißt jedoch nicht das dies nun die beste Lösung wäre in Hinblick auf die Qualität der entstehenden Stadt.

Will man das perfektionieren kommt man wohl um umfassende Analysen zu den jeweils möglichen Platzierungspunkten nicht drumherum.


Aber das ist ist eben die Frage : wie geht man an ein Projekt ran.

Bsp : ich würde jetzt hier die Rechenzeit noch optimieren und dann erstmal mit anderen Dingen weiter machen. Wenn später Geschäfte platziert werden sollen sieht die Situation ja vielleicht schon wieder ganz anders aus.


Oder anders gesagt : bevor ich den kleinen schnippsel geschrieben habe, da hatte ich schon einen genauen Plan was ich machen will (siehe dem Post). Während dem testen hat sich jedoch ergeben das dies so generisch garnichts taugt weshalb ich schon ein paar änderungen drinne habe (die "autobahnen" vermeiden sollten, was sie nicht besonders gut tun)

Da kriselt es bei mir immer so ein wenig : ewig bei einem Thema hängen. Das kann ich einfach nicht. Erstmal weitermachen und wenns irgentwann insgesamt läuft, dann kann man immer noch optimieren.

Das mag aber jeder anders sehen.
 
Zuletzt bearbeitet:
Das Genre scheint wohl tot zu sein. Hab heute auch zufällig an Capitalism gedacht und ob in all den Jahren mal etwas vergleichbares gemacht worden ist. Ist es wohl nicht.
Die X-Serie ist ziemlich statisch, nicht von den Preisen her, aber vom Schwierigkeitsgrad. Man sucht sich einfach einen sicheren Sektor und zieht Fabrik für Fabrik hoch - nicht sehr anspruchsvoll, eher für die CPU am Ende.
Dann könnte Sim City 4 an dieser Stelle noch interessieren. Obwohl es nur Single-Core unterstützt, macht das ganze Spiel inzwischen etwas mehr Spaß, insbesondere, wenn man die Mod für die Verkehrsoptimierung aufsetzt.

Alles in allem suchen wir ja kein klassisches Spiel zum Vergnügen mehr, sondern eine Herausforderung. Der Übergang zu den "serious games" ist da fließend, die hier aufgelisteten Beispiele haben aber mit Wirtschaft nicht viel zu tun.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben