2

私は C++ を初めて使用するので、小さなターン制の RPG エンジンを作成することにしました。これが私が抱えている問題です。、、、、、などのMob属性を持つクラスがあります。それらにはすべて、一緒に使用するゲッターとセッターがあります。攻撃に関与する 2 つの Mob を取る方法もあります。また、HP 100、Stamina 30、Strength 30 の Mob を 2 つ作成しました (Edit Strength は実際には 5 です。私の悪い点です)。とにかく、攻撃するためのコードは次のとおりです。HPMPStaminaStrengthIntelligenceattack()

srand(time(0));
int damage = mobSend.getStr() * 5 + (rand() % str);
cout << damage << endl;
mobRec.setHP((mobRec.getHP() - damage));
mobSend.setStamina(mobSend.getStamina() - 5);

プログラムを実行すると、最初にHPとスタミナを出力し、攻撃方法を実行してから、HPとスタミナを再度出力するようにしています。しかし、実行してもモブのHPやスタミナは減りません。setHP()私はそれを確認するためにテストしてsetStamina()機能したので、メインメソッドでhpとスタミナを0に設定すると機能しました.

loseHP()パラメータとしてダメージを受けたもののような他のことを試しました:

void Mob:: loseHP(int damage) {this->HP -= damage;}

それでもうまくいきませんでした。ここで何が間違っていますか?私はここで本当に困惑しているので、助けていただければ幸いです。

4

1 に答える 1

1

attack()問題は、オブジェクトをメソッドに渡すときにオブジェクトを値でコピーしているため、mobRecとに変更を加えてもmobSend、これらの変更は元の Mob インスタンスに実際には反映されないことです。

これを修正するには、メソッドのシグネチャで参照によって変数を渡す必要があります。

void attack (Mob &mobSend, Mob &mobRec){...}

これにより、メソッド内で行われた変更は、一時的なローカル コピーではなく、そのメソッドに渡された実際の Mob を実際に変更することが保証されます。

于 2013-06-26T23:27:41.860 に答える