1

プログラムが.txtファイルから入力を読み取る、ある種のRPGバトルを作成しています。コードを作成しましたが、戦闘を開始したいときに、範囲外のエラー ベクトル添え字が表示されました。誰でもこれを修正する方法を教えてもらえますか? ありがとうございました:)これがコードです。完全なコンテキストを取得できるようにすべてを含めましたが、主な問題は、メイン cpp の while ループにあると思います。

同じ軌道に乗るように、ラマナイトの txt ファイルの内容 (ヒットポイントと再生ポイント) は次のとおりです。

8 2

7 3

6 1

ニーファイトのために

10 3

12 4

11 5

これが私のwarrior.hファイルです

#pragma once
#include <string>

using namespace std;

class warrior
{
public:

    warrior ();
    warrior (int h, int r);
    int getDamage() const;
    void takeDamage(int damage);
    int getCurrentHP() const;
    void regenerate();
    string tostring(int h, int r);

private:
    int HitPoints;
    int RegPoints;
    int damage;


};

これが私の戦士のcppです

#include "warrior.h"
#include <string>
#include <iostream>

warrior::warrior(int h, int r)
{
    HitPoints = h;
    RegPoints = r;
}

int warrior::getDamage() const
{
    int damage = rand () % HitPoints;
    return damage;
}

void warrior::takeDamage(int damage)
{
    HitPoints = HitPoints - damage;
}

int warrior::getCurrentHP() const
{
    return HitPoints;
}

void warrior::regenerate() 
{
    HitPoints = HitPoints + rand () % (RegPoints);
}

string warrior::tostring(int h, int r)
{
    return 0;
}

私のメインファイル

#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <ctime>

#include "warrior.h"

using namespace std;

void main ()
{
    srand(time(0));
    ifstream input1;
    cout << "input file name nephite: ";
    string filename;
    cin >> filename;

    input1.open(filename);

    int HP1, RP1;
    vector <warrior*> nephites;

    while (input1 >> HP1 >> RP1)
    {
        nephites.push_back(new warrior(HP1, RP1));
    }

    cout << nephites.size() << endl;

    ifstream input2;
    cout << "input file name lamanite : ";
    string filename2;
    cin >> filename2;

    input2.open(filename2);
    int HP2, RP2;
    vector <warrior*> lamanites;

    while (input2 >> HP2 >> RP2)
    {
        lamanites.push_back(new warrior(HP2, RP2));
    }
    cout << lamanites.size() << endl;

    cout << endl << "Battle" << endl;

    warrior nephitesw  = warrior (HP1,RP1);
    warrior lamanitesw = warrior (HP2,RP2);

    while ((nephites.size() > 0) && (lamanites.size() > 0))
    {

        int rN = rand () % nephites.size();
        int rL = rand () % lamanites.size();
        cout << rN << "xx" << rL << endl; // so that i know what rN and rL is

        while((nephites[rN]->getCurrentHP() > 0) && (lamanites[rL]->getCurrentHP() > 0)) // the program can't execute this part of the code
        {
            nephites[rN]->takeDamage(lamanites[rL]->getDamage());
            lamanites[rL]->takeDamage(nephites[rN]->getDamage());

            if(lamanites[rL]->getCurrentHP() > 0)
            {
                lamanites[rL]->regenerate();
            }
            else
            {
                lamanites.erase(lamanites.begin() + (rL));
            } 

            if(nephites[rN]->getCurrentHP() > 0) 
            {
                nephites[rN]->regenerate();
            } 
            else
            {
                nephites.erase(nephites.begin() + (rN));
            }
        }

        cout << "NEP HP: " << nephites[rN]->getCurrentHP() << " " << "LAM HP: " << lamanites[rL]->getCurrentHP() << endl;
    }

    system ("Pause");
}
4

2 に答える 2