私はローグライク ゲームに取り組んでおり、ほとんどの場合、レベルに 3 つのモンスターが存在するように設定しています。だから私はモンスターへの3つのポインタを持っています. それらはすべてNULLから始まります。
そのモンスターが死亡した後、ポインターを NULL に戻すにはどうすればよいですか? それとも、私は間違った考えを持っていますか?基本的に、そのポインターが別のモンスターとして再生されるまで、モンスターを削除する必要があります。
いくつか試してみましたが、セグフォルトが発生し続けます。
消去、削除、単純にNULLに設定して再ポイントしてみました。それを理解することはできません。
ポインタを設定する方法は次のとおりです。
CreatureFactory myCreatures = CreatureFactory::instance();
Creature * pCreature1 = NULL;
Creature * pCreature2 = NULL;
Creature * pCreature3 = NULL;;
ItemFactory myItems = ItemFactory::instance();
Item * pItem1 = myItems.generateItem();
dl.placeInGame(personPlaying,randomGen);
int monsterCount = 0;
int turnCount = 0;
bool playingGame = true;
char playerController;
while (playingGame){
if ((turnCount % 2 == 0) && (personPlaying.getHP() < personPlay$
personPlaying.generateHP();
}
if (((turnCount % 3) == 0) && (monsterCount < 2)){
if(pCreature1 == NULL){
pCreature1 = myCreatures.generateCreature(4);
dl.placeInGame(pCreature1,randomGen);
monsterCount += 1;
}
else if(pCreature2 == NULL){
pCreature2 = myCreatures.generateCreature(4);
dl.placeInGame(pCreature2, randomGen);
monsterCount += 1;
}
else if(pCreature3 == NULL){
pCreature3 = myCreatures.generateCreature(4);
monsterCount += 1;
}
}
dl.dump();
personPlaying.dumpStats();
CreatureFactory code..
CreatureFactory & CreatureFactory::instance(){
static CreatureFactory myObj;
return myObj;
}
CreatureFactory::CreatureFactory(){
m_mtRandom.seed( time(NULL) );
fstream xmlFile;
xmlFile.open("critters.xml");
vector<XMLSerializable*> pObjects;
parseXML(xmlFile, pObjects);
XMLSerializable * pObject;
for(auto it = pObjects.begin(); it != pObjects.end(); it++){
pObject = (*it);
Creature * pCreature = dynamic_cast<Creature*>(pObject);
if (pCreature != NULL){
m_vCreatures.push_back(pCreature);
}
}
}
CreatureFactory::~CreatureFactory(){
}
Creature * CreatureFactory::generateCreature(int iMaxLevel) {
vector<Creature*> tempCreatures;
for(auto it = m_vCreatures.begin(); it != m_vCreatures.end(); it++){
if ((*it)->getLevel() <= iMaxLevel){
tempCreatures.push_back((*it));
}
}
int randomCreature = (m_mtRandom() % (tempCreatures.size() - 1));
Creature * pCreature = tempCreatures.at(randomCreature);
Creature * pReturnValue = new Creature(*pCreature);
return pReturnValue;
}
次に、大量のループを実行し、大量のクラスを使用します。これらのモンスター オブジェクトへのポインタは、約 6 つか 7 つのクラスを通過します。そのうちの 1 つは、HP が 0 になったときに NULL に設定する必要があります。
ありがとう