migf1 έγραψε:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
typedef enum ScenAniMood { SAM_SCARED = -1, SAM_NEUTRAL, SAM_AGGRESSIVE } ScenAniMood ;
/** extends AnimalType class **/
typedef struct SceneAnimal {
AnimalType type; /* general characteristics of a SceneAnimal (inhereted from AnimalType) */
int id; /* for identification in the scene */
ScenAniMood mood;
int health; /* 0 to 100 */
int dist; /* distance from player */
} SceneAnimal;
Κατόπιν η δομή της (εκάστοτε) σκηνής...
- Μορφοποιημένος Κώδικας: Επιλογή όλων
typedef struct Scene {
int nanimals; /* number of animals in scene */
SceneAnimal *animals; /* will be allocated dynamically to nanimals * sizeof(SceneAnimal) */
} Scene;
Λοιπόν έχω μια απορία σχετικά με τις παραπάνω δομές.
Κάποια στιγμή κάποια απ' τα ζώα της σκηνής θα πρέπει να "αποχωρούν".
Οπότε έχω 2 τρόπους στο μυαλό μου για να γίνει αυτό.
Ο ένας είναι να αντικαταστήσουμε την "*animals;" στην "Struct Scene" με μια linked list και έτσι όποτε θέλουμε προσθέτουμε ή αφαιρούμε ζώα απ' την λίστα και όταν θέλουμε να επισκεφτούμε όλα τα ζωντανά ζώα απλά διατρέχουμε την linked list.
Η 2η σκέψη για να μην πειράξουμε την "*animals;" είναι να βάλουμε ένα νέο πεδίο (πχ. alive) στην SceneAnimal που θα έχει τύπο bool και θα δείχνει αν ένα ζώο υπάρχει ή πέθανε. Έτσι θα διατρέχουμε ολόκληρη την λίστα με τα ζώα, αλλά θα σταματάμε μόνο όπου το alive θα είναι true.
Ποια απ' τις δύο τακτικές θα ήταν "καλύτερη"; Ή υπάρχει μήπως κάποια εναλλακτική;


