Allgemeine Frage zum Programmieren

Posted By: gameplan

Allgemeine Frage zum Programmieren - 10/02/12 12:54

Hallo,

ich habe in meinem Spiel ziemlich viele Entities gleichzeitig auf dem Bildschirm in Aktion. Da es soviele sind, kann ich nicht allen eindeutige Pointer zuweisen, oder zumindest nur temporäre.
D.h. um irgendeine bestimmte Entity zu manipulieren, lasse ich jedes mal eine for-Schleife ("for(temp_ent = ent_next(NULL); temp_ent; temp_ent = ent_next(temp_ent))") durchlaufen, nur um diese dann anhand eines Skills (also "temp_ent.eigenschaft A == 1") ersteinmal zu finden. Danach folgt dann anhand des durch die for-schleife zugewiesenene Pointers "temp_ent" der eigentliche Befehl. So mache ich dies eigentlich bei fast jeder Sache.

Ist das nun eigentlich die übliche Vorgehensweise? Geht das auch einfacher/besser/effektiver? Falls ja, wie würde man soviele unterschiedliche Entites identifizieren und ansprechen?
Posted By: Kartoffel

Re: Allgemeine Frage zum Programmieren - 10/02/12 13:22

Wenn jede entity eine eindeutige / einzigartige Nummer hat könntest du mit einem ENTITY*-Array arbeiten.
Posted By: gameplan

Re: Allgemeine Frage zum Programmieren - 10/02/12 13:33

Stimmt, daran hab ich auch schon gedacht, und tatsächlich lasse ich beim Erzeugen jeder Entity eine Zählvariable mitlaufen und als Skill zuweisen. Aber müsste ich dann nicht auch wieder, um eine Entity mit einer bestimmten Nummer zu manipulieren, ersteinmal wieder eine for-Schleife zum Finden der Entity laufen lassen?
Posted By: Superku

Re: Allgemeine Frage zum Programmieren - 10/02/12 13:49

Definiere doch einfach ein Array, wie Kartoffel sagte, bspw. wie folgt:

#define MAX_ENEMIES 100

ENTITY* ent_enemies[MAX_ENEMIES];

var enemy_num = 0;

action enemy()
{
ent_enemies[enemy_num] = me;
enemy_num++;
EDIT: hier solltest du natürlich noch prüfen, ob enemy_num < MAX_ENEMIES ist, sonst eine Fehlermeldung ausgeben
...
}


for(i = 0; i < enemy_num; i++)
{
you = ent_enemies[i];
your.pan += 5*time_step;
}
Posted By: gameplan

Re: Allgemeine Frage zum Programmieren - 10/02/12 14:00

Danke für die Antworten. So ein Array für Entites zu verwenden, das heißt direkt über die Pointer, ist mir bisher nicht in den Sinn gekommen und ich werde mir überlegen ob es für meine Zwecke einsetzbar ist.
Posted By: Uhrwerk

Re: Allgemeine Frage zum Programmieren - 10/02/12 14:21

Du könntest Dir vielleicht auch eine Hashtable programmieren, wenn Du den Aufwand nicht scheust. Dann könntest Du über Gruppen von Entities, die den gleichen Schlüssel haben, iterieren.
Posted By: gameplan

Re: Allgemeine Frage zum Programmieren - 10/02/12 14:29

Hm, Hashtable, das übersteigt wohl im Moment meine Programmierkenntnisse. Eigentlich erreiche ich mein Ziel beim Programmieren meist mit eher einfachen Mittlen, und viel Vektor und Matrizen Mathematik. Für die Zuweisung von Eigenschaften und Gruppen zwischen Entites und untereinander verwende ich beispielsweise mehrre Matrizen, in denen Entitynummern andere verknüpfende Informationen abgelegt sind.
Posted By: Uhrwerk

Re: Allgemeine Frage zum Programmieren - 10/02/12 16:02

Eine Hashtable ist nicht sonderlich schwer zu programmieren. Ich bin mir sehr sicher, dass Du das schaffen würdest. Wenn Du allerdings mit Deinen Mitteln gut zurecht kommst, dann bleib dabei. Warum Zeit für schwierige Sachen verplempern, wenn man nicht muss. War nur als Anregung gedacht, falls Du mehrfach Verwendung dafür gefunden hättest.
© 2024 lite-C Forums