Hallo zusammen,
für ein in C++ geschriebenes rundenbasierendes Programm baue ich gerade einen Manager für
Ingame-Events. Diese Events sollen
modifizierbar sein, also z.B. aus XML-Dateien eingelesen werden. Ich habe Bedenken hinsichtlich der
Effizienz, wenn irgendwann einmal sehr viele Events existieren. Die Struktur dabei ist:
- WENN (conditions) DANN (event)
Beispiel:
- WENN ((Runden_Anzahl > x1) UND (Material_im_Lager < x2) UND (x3 % Wahrscheinlichkeit)) DANN {Material_im_Lager +1; Nachricht ausgeben;}
Bestehende Beispiele sind z.B. die Paradox-Spiele
Hearts of Iron oder
Europa Universalis, oder die modifizierbare
X-Serie von Egosoft. Ich möchte gerne noch bis ca. 50.000 Events bei einer akzeptablen Laufzeit sein, jeweils mit 1 bis 8 Bedingungen.
Frage: Wie lässt sie so ein Event-Manager effizient umsetzen? Ich kann natürlich bei Programmstart alle Events einlesen und dann in den Speicher laden, der dann zu Beginn einer neuen Runde alle Bedingungen nacheinander abfragt. Oder ich kann die Events mit IDs versehen und nur Bedingungen und IDs einlesen - und bei positivem Treffer über die ID das Ingame-Event einlesen und einleiten. Oder ich lade bei Rundenwechsel alle Events ein, prüfe sie und gebe dann den Speicher wieder frei... Wie handhabe ich das ab sinnvollsten? Irgendwelche Ideen und Erfahrungen eurerseits?
- Corak