Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

kunipferd

Frischling

  • »kunipferd« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Klagenfurt

Beruf: Webentwickler

  • Private Nachricht senden

1

17.04.2015, 16:56

Strategiespiel: Bevölkerungsentwicklung

Hallo miteinander!

Ich zerbrech mir seit einiger Zeit den Kopf darüber wie ich bei einem Strategiespiel die Bevölkerungsentwicklung aufzieh.

Die Werte auf denen das basiert:
Ich hab Planeten mit Planetengrößen von 1 bis 20.
Einen Fruchtbarkeitswert von 1 bis 10.
Diese beiden Werte reglementieren das Maximum. Unter dem Maximum wächst die Bevölkerung, drüber verhungert sie.
Ein Planet 10 mit Fruchtbarkeit 5 Sollte ca 10mrd Leute versorgen können.

Ich hab in einer Datenbank den Wert last_collect, der Zeitpunkt der letzten Berechnung.

Meine Idee ist jetzt, dass ich ab dem Zeitpunkt der letzten Berechnung her nimm, wieviel Bevölkerung es gibt, und mit Planetengröße und Fruchtbarkeit ausrechne wie der neue Stand ist. Die Formel dafür zu finden ist aber wesentlich komplizierter als ich gedacht habe, weil ja eigentlich jede Sekunde Bevölkerung dazukommt, und die dazugekommene Bevölkerung wiederum die Werte verändert, also der Zuwachs nicht linear ist sondern exponentiell. Ist denk ich sowas wie eine Zinseszinsberechnung?

Irgendjemand Erfahrung mit sowas?

Hab einige Infos gefunden wo zum Beispiel erklärt wird wie die Formel der Bevölkerungsentwicklung von Civ und anderen bekannten Strategiespielen aussieht, die sind aber rundenbasiert und haben fixe Werte. Da müssen einfach Werte erreicht werden und wenn die voll sind gibts an Zuwachs.

Bei Wissenschaft und Wirtschaft kommen dann ähnliche Rechenaufgaben auf mich zu.

Bin für jeden Hinweis dankbar, hab mittlerweile ein Excel-Sheet mit zahlreichen Rechenversuchen krieg aber keine schönen Werte zusammen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »kunipferd« (17.04.2015, 17:29)


TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

2

17.04.2015, 17:09

Eine exponentielle Formel kannst du mit pow() implementieren. Du kannst aber auch einfach sowas wie graphtoy benutzen und dir eine beliebige Formel zusammenbasteln, die dir gefaellt. Muss ja nicht realistisch sein sondern nur Spass machen.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

17.04.2015, 19:07

Du kannst das ja auch "rundenbasiert" berechnen. Du legst einfach fest wie lange eine "Runde" dauert, zum Beispiel 20 Frames oder 35.4 Sekunden oder wie auch immer du das festlegen möchtest. Jetzt kannst du in diesem Rhythmus die neue Bevölkerung berechnen. Weiterhin kannst du überlegen anstatt eine Formel für die gesamte Bevölkerung zu suchen, eine Formel für die Bevölkerungsänderungsänderung zu bestimmen. Diese kann zum Beispiel das Verhältnis zwischen angestrebter Bevölkerung und aktueller Bevölkerung bekommen.

Quellcode

1
angestrebteBevoelkerung/aktuelleBevoelkerung


Ist das Verhältnis 1 so hast du die gewünschte Bevölkerung erreicht. Ist das Ergebnis kleiner als 1 so ist der Planet überbevölkert. Je näher das Ergebnis an der 0 ist desto stärker ist die Überbevölkerung. Je größer das Ergebnis größer 0 ist, desto stärker sollte der Zuwachs deiner Bevölkerung sein. Aber das nur als Anregung.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

4

17.04.2015, 19:08

Wenn ich mich richtig erinnere, habe ich es bei meinem letzten Spiel so gemacht, dass die Bevölkerung mit einer konstanten Geschwindigkeit (1 neuer Einwohner alle 5 Sekunden) wächst, solange sie gut versorgt ist. Ab einer Gewissen Bevölkerung (100 Menschen oder so) wächst die Bevölkerung dann schneller.
Natürlich ist das nicht sehr realistisch. Aber der Vorteil ist, dass der Spieler es noch überblicken kann. Wenn das System hinter Berechnungen so simpel ist, dass man schnell im Kopf überschlagen kann, wie lange etwas z.B. noch dauert, ist das vielleicht für einige Spieler ganz nett. Ich fand es zum Beispiel bei Rollenspielen immer furchtbar, wenn zwar Items irgendwelche Werte hatten, aber ich die Formeln nicht kannte mit denen sie verrechnet wurden, oder sie einfach so kompliziert waren, dass ich es selber nicht mehr nachvollziehen konnte / wollte.
Und was ich an meinem Spiel auch gemerkt habe: Es muss wirklich nicht realistisch sein. Die "Spielregeln" sind nur dafür da, ein interessantes Spiel zu bieten. Es ist gut, einen gewissen Bezug zur Realität zu haben, weil der Spieler dann besser durchblickt, wie die Spielabläufe funktionieren und es nicht so fremdartig wirkt, aber abgesehen von davon, hat man extrem viele Freiheiten.
Lieber dumm fragen, als dumm bleiben!

5

17.04.2015, 20:13

Also die meisten Modelle, die ich zum Bevölkerungswachstum kenn, haben die Form
§\dot x=\alpha (\beta-x) §
Du könntest deine Parameter in so eine Form bringen und das dann einfach diskret lösen.

Powerpaule

Treue Seele

Beiträge: 162

Wohnort: Berlin

Beruf: Softwareentwickler

  • Private Nachricht senden

6

19.04.2015, 16:14

Ich stimme da Schorsch zu. Zum Ersten das rundenbasiert zu berechnen mit festen Zeiträumen, was es schonmal einfacher macht, und zweitens das über ein Verhältnis zu bestimmen, wie viel die Bevölkerung wächst.
Wie stark das Wachstum dann relativ ausfällt, kann man sich ja dann ausgestalten.
Einfach wäre bspw sowas:


Quellcode

1
2
3
4
x: Verhältnis von maximaler Bevölkerung zu aktueller Bevölkerung (also maximale Bevölkerung / aktuelle Bevölkerung)
f: Relatives Wachstum der Bevölkerung

f = pow(x - 1, 3)


Dann wäre bei einem Verhältnis von 1 das Wachstum 0, bei einem schlechteren (f < 1) das Wachstum negativ, sonst positiv, aber immer schwächer, je näher es an der 1 dran ist. Man müsste das aber sicher noch abschwächen oder eine Grenze einführen, da das Wachstum hier sonst anfangs wohl zu unrealistisch groß ist.

Die maximale Bevölkerung lässt sich dann ja beliebig aus allen möglichen Parametern berechnen. So ähnlich hab ich es vor Jahren bei einem Spiel mit Inseln auch mal gemacht, da gab es auch eine Art Wohnraum, dazu noch Nahrungsmittelversorgung sowie andere Fakoren (Steuern, Forschungen) etc (sogar Kinderbetreuung konnte man einstellen ; ) ) - diese haben sich zwar nicht direkt auf die Wachstumsrate ausgewirkt, sondern auf 3 Werte (Geburtenrate, Sterberate, Abwanderungsrate - was dann zusammen die Wachstumsrate ergab), aber man muss es ja nicht so kompliziert machen ; )
Man kann dann auch recht einfach die maximale Bevölkerung sich dynamisch verändern lassen, die Einwohnerzahl wird sich dann immer nach und nach auf den neuen Wert einpendeln.

Aber es hängt halt auch vom Schwerpunkt des Spiels ab. Bei meinem Spiel damals war Bevölkerung ein wichtiger Faktor (anfangs wurden sogar Bevölkerungspyramiden simuliert...), aber wenn das eher nur ein Mittel zum Zweck ist, sollte man es überschaubar halten, da ist dann Vorschlag von Jonathan_Klein besser ; )

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Powerpaule« (19.04.2015, 16:22)


kunipferd

Frischling

  • »kunipferd« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Klagenfurt

Beruf: Webentwickler

  • Private Nachricht senden

7

19.04.2015, 18:22

Danke! Im Endeffekt is es nun ein Mashup aus allen Ansätzen geworden.

Ich hab das Wachstum jetzt als Prozentwert, den wende ich wie bei der Zinseszinsberechnung auf die aktuelle Zahl an.
Da sich aber pro Ergebnis der Prozentwert absenkt, kann ich nicht wie beim Zins einfach mit Hochzahlen arbeiten sondern muss die Durchläufe manuell machen, also einen Zeitraum festlegen und dann Pro Zeitraum einmal drüber rechnen. Ich krieg so ziemlich schöne Zahlen, die Formel is halt Hammer. Denk ich werd jeden Tag um vier Uhr einmal alles durchrechnen, damit die Durchläufe klein bleiben und sonst halt pro Zugriff relativ zum letzten Tagesdurchlauf.
Auf der anderen Seite brauch ich für die Flotten eh einen CronJob der sekündlich durchläuft, da könnt ich auch die Bevölkerung durchrechnen. Schau ma mal.

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

8

19.04.2015, 20:02

Ohne das Spiel jetzt zu kennen frage ich mich, wieso Größe und Fruchtbarkeit überhaupt Einfluss auf die maximale Bevölkerung haben?
Für mich klingt Größe nach "bebaubarer Platz"(nachvollziehbar) und Fruchtbarkeit nach "maximalmögliche Ausbeutung an Ressourcen"(Ressourcen könnten ja auch von außen kommen), wie viele Menschen da jetzt überleben können hängt doch eher von anderen Faktoren ab, oder nicht?
WIP Website: kevinheese.de

kunipferd

Frischling

  • »kunipferd« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Klagenfurt

Beruf: Webentwickler

  • Private Nachricht senden

9

19.04.2015, 20:08

Welche Faktoren?

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

10

19.04.2015, 21:12

Generell mag ich für Bevölkerungen egtl. eine Smoothstep Funktion. Entspricht nicht ganz der Wirklichkeit, sieht aber halbwegs realistisch aus.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Werbeanzeige