6

クラス Monsters があり、インスタンスが作成されると、各モンスターをそこの武器にリンクする必要があります。元。グリフォン モンスターはグリフォン アタック 1 とグリフォン アタック 2 を持っている必要があります。もちろん、攻撃の名前は未定ですが、今のところ、グリフォン アタック 1 と 2 をうまく使用してください。

現在、私はこれを持っています。

    #include <vector>

typedef enum {Living, Dead, Nature} Race;
typedef enum {Gryphon, Oracle, Mercenary,Templar,
              Satyr,Fallin Angel,ArcAngel,Satan,Grimreaper,
              Unbaptized Babies,Boggart,Succubus,Meat Wagon,
              Djinns,Manticore,Water Nymph,Plant Nymph,
              Mother Nature, Cannibal Tribesmen,Wyvern,
              Vegetable Lamb, Ent, Lava Worm, Alpha Dragon
              } MonsterType;
typedef enum {gryphon1,Oracle1, Mercenary1,Templar1,
              Satyr1,Fallin Angel1,ArcAngel1,Satan1,Grimreaper1,
              Unbaptized Babies1,Boggart1,Succubus1,Meat Wagon1,
              Djinns1,Manticore1,Water Nymph1,Plant Nymph1,
              Mother Nature1, Cannibal Tribesmen1,Wyvern1,
              Vegetable Lamb1, Ent1, Lava Worm1,Alpha Dragon1,
              Gryphon2, Oracle2, Mercenary2,Templar2,
              Satyr2,Fallin Angel2,ArcAngel2,Satan2,Grimreaper2,
              Unbaptized Babies2,Boggart2,Succubus2,Meat Wagon2,
              Djinns2,Manticore2,Water Nymph2,Plant Nymph2,
              Mother Nature2, Cannibal Tribesmen2,Wyvern2,
              Vegetable Lamb2, Ent2, Lava Worm2, Alpha Dragon2
              } Weapon;

Class Monsters{

protected:
    MonsterType type;
    Race race;
    std::vector<Weapon> weapon_list;
public:
     bool flying;
     bool lava;
     bool water;
     int life;
     int karmaCost;
     int move;
     int crit;
     int defMagic;
     int defNonMagic;
     bool isDead;
     bool canMove;
     bool canAttack;
     bool onFlag;
     int nextTurn;


};

ベクトルについてはよくわかりませんが、それが必要かどうかは、私がいじっていたいくつかの実験でした..しかし、武器をモンスターにリンクする最良の方法は何ですか? また、各武器にはそれに伴う値があることに注意してください。

gryphon attack 1 {
  int range = 10
  int ticks = 5
  bool magical = false
  int power = 23
  bool heals = false 
}  


gryphon attack 2 {
  int range = 5
  int ticks = 7
  bool magical = true
  int power = 29
  bool heals = true 
} 

実際の値はiniまたはネットワークから読み込まれるため、実際の値についてはまだ心配していませんが、値を追加できることを知る必要があります gryphon->weapon1->range = 5

私はまだこれに非常に慣れていないので、何か非常に間違っていると思われる場合は教えてください.

4

3 に答える 3

1

大きなタイプリストではなく、モンスターの階層構造を作成してみてください。たとえば、位置/方向と種族だけを持つ基本クラスのモンスター。次に、たとえばヘルスが追加された派生クラス LivingMonster と、武器を持つクラス LivingArmedMonster を作成します。これにより、肥大化したクラスを取得せず、大きなモンスタークラスを爆破することなく、後で他の機能を使用するモンスターを簡単に追加できます.

あなたの武器に関しては:リストは素晴らしいアイデアです.リストを変更せずに別の武器(基本クラスから派生した武器)を持つことができるので、私が追加する唯一のことはポインタを使用することです. また、モンスター間で武器を交換するのが簡単になります (すべての武器を作成する武器ストレージがあります)。その後、武器をドロップして拾うことができるので、ポインタをモンスターの武器ベクトルから別のベクトルに移動するだけです。これは、オブジェクト全体をコピーするよりもはるかに簡単です

于 2013-06-10T09:30:28.117 に答える