Вызов функции класса из вектора вместо массива - PullRequest
0 голосов
/ 28 марта 2012

В настоящее время я работаю над тем, как загрузить из файла несколько разных NPC и загрузить их в свою игру. У меня все работает правильно с массивами, но я хотел бы изменить его на использование вектора, так как я могу изменить размер в случае, если мне нужно больше NPC, чем места, доступного в массиве, и поэтому у меня не будет в основном пустого массива, если Мне не нужно много NPC в настоящее время. Обратите внимание, что следующий код взят из программы тестирования, а не из моего реального программирования. Я сделал это, чтобы случайно не связываться с полным проектом.

int main()
{
char input;
bool Running = true;
NPC Creatures[MAX_NPCS];

//InitCreatures loads the X, Y and Type from the file. I know with vectors I have to
//resize it as I go along, Which would be included in the function.
if(Creatures[MAX_NPCS].InitCreatures(Creatures) == false)
{
    Creatures[MAX_NPCS].CleanUp(Creatures);
    return 0;
}

while(Running == true)
{
    cout << "(C)heck an NPC, (A)ttack and NPC or (E)xit the program\n";
    cin >> input;
    switch(input)
    {
        case 'C': Creatures[MAX_NPCS].Check(Creatures); break;
        case 'c': Creatures[MAX_NPCS].Check(Creatures); break;
        //The Check function just shows the X, Y and Type of the NPC
        case 'A': Creatures[MAX_NPCS].Attack(Creatures); break;
        case 'a': Creatures[MAX_NPCS].Attack(Creatures); break;
        //Attack shows X, Y and type and then removes that NPC from the array.
        case 'E': Running = false; break;
        case 'e': Running = false; break;
        default: cout << "That was not a valid input\n"; break;
    }
}

Creatures[MAX_NPCS].CleanUp(Creatures);
cout << "Exiting\n";
system("PAUSE");
return 0;
}

На самом деле единственная проблема, с которой я сталкиваюсь, это заставить Main запускать функции класса NPC из вектора вместо использования массива, как у меня сейчас. Я могу легко изменить другие функции в функциях, которые я вызываю, чтобы принять вектор и правильно его обработать.

Когда я пытался использовать вектор для запуска функций, я мог вызывать их только тогда, когда у меня было что-то вроде этого:

Creatures[1].Attack(Creatures);

Конечно, когда я их так называю, значения не возвращаются правильно, и я обычно получаю сообщение об ошибке. Кроме того, я не знаю, сколько NPC будет загружено для текущей карты, если есть.

Любая помощь с этим будет оценена. Я понимаю, что я новичок в программировании, особенно когда дело касается Векторов. Если мой код функции необходим, я с удовольствием выложу его.

1 Ответ

0 голосов
/ 28 марта 2012

Вы можете просто создать вектор и иметь первый элемент там, чтобы иметь возможность вызывать функцию InitCreatures (вы также можете перезаписать первое существо позже).

vector<NPC> Creatures(1);
Creatures[0].InitCreatures(Creatures);

Я предполагаю, что вВ классе у вас есть параметр, переданный по ссылке.

bool InitCreatures(vector<NPC>& x) { ... }

Но так как вы даете существа в качестве параметра для каждой функции, которая у вас есть (нужна ли она для проверки или атаки?) - не лучше ли было быесть класс для хранения вектора NPC?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...