Ich habe ein Projekt, um ein Echtzeit-Strategiespiel von Grund auf neu zu erstellen. Ich bin noch in der frühen Planungsphase, aber ich habe ein wenig programmiert, um die Mechanik zu sehen.
Ich kann programmieren. Ich habe auch eine gute Vorstellung davon, wie ich die Spielklassen und die regelbasierte (State-Machine) KI für den Computerspieler strukturieren werde.
Ich möchte Doktrinen entwickeln, die einer bestimmten Einheit ein bestimmtes Verhalten verleihen (aber auf vielen Einheiten gleichzeitig angewendet werden können), wie z. B. Pfadfinder, Missionsroute folgen, Position halten (jeden nahenden Feind angreifen oder sich zurückziehen, wenn er überfordert ist). , etc...
Die Doktrinen gelten nur für die Einheiten, haben also eine Einheitsperspektive und sind nicht auf die gesamte Kartensituation bezogen.
Die Computer-KI analysiert die gesamte sichtbare Karte und entscheidet anhand eines anderen Regelsatzes, welcher Einheit welche Soktrin zugewiesen werden soll.
Ich mache dies in C # mit OpenGL.
Im Moment habe ich nicht viel, nur ein paar Dinge in Tests, bevor ich mit meiner Hauptkonzeption beginne. Ich habe eine Spieleschleife, in der die gesamte Spielverarbeitung (bei der ich die Aktualisierung, den Kampf, das Rendern usw. nacheinander aufrufen werde) stattfinden wird. Sie wird sehr oft aufgerufen, wenn das Application.Idle-Ereignis eintritt.
Jetzt habe ich mich gefragt. Da es im Gameloop eine Menge Dinge zu verarbeiten gibt, sollten die Computer-KI und die Einheiten ihre Aktionen in dieser Schleife auswählen, oder wird es zu langsam sein?
Wenn alle Dinge gleichzeitig ausgeführt werden sollen, sollte ich einen separaten Thread für die Computer-KI erstellen? Oder sogar einen eigenen Thread für jede Einheit?
Ich habe nicht viel Erfahrung mit Multithreading. Was wäre der beste Ansatz dafür?