2016-06-13 2 views
1

У меня возникла небольшая проблема, и я повсюду смотрел, но я верю, что смотрю в неправильном направлении. Я создал учетную запись здесь в надежде решить небольшую проблему, которую у меня есть. Я нахожусь в середине программирования RPG, и когда я пытаюсь отобразить «магические заклинания» одного персонажа, я могу отображать только [3]. [0] [1] [2] разбивает мою игру. Игра находится на C++.Отображение элемента из указателя struct

Пример моего кода ниже:

Создать мой-структуру:

struct Fighter { 
    int HP;   //max 999 
    int maxHP; 
    int MP;   //max 999 
    int maxMP; 
    int STR;  //max 255 
    int CON;  //max 255 
    int AGL;  //max 100 
    bool dead; 
    const char* Magic[]; 
}; 

Fighter * player = new Fighter[5]; 

Инициализация и назначение элементов с этими параметрами для членов 4 партии:

void InitPlayer(int pClass, int p) 
{ 
    if(pClass == 0) //Knight 
    { 
     player[p].maxHP = 750; 
     player[p].HP = player[p].maxHP; 
     player[p].maxMP = 0; 
     player[p].MP = player[p].maxMP; 
     player[p].STR = 200; 
     player[p].CON = 0; 
     player[p].AGL = 35; 
    } 
    else if(pClass == 1) //Ninja 
    { 
     player[p].maxHP = 675; 
     player[p].HP = player[p].maxHP; 
     player[p].maxMP = 0; 
     player[p].MP = player[p].maxMP; 
     player[p].STR = 175; 
     player[p].CON = 0; 
     player[p].AGL = 80; 
     player[p].Magic[0] = "Cure"; 
     player[p].Magic[1] = "Haste"; 
     player[p].Magic[2] = "Sleep"; 
    } 
    //... More Character code 
} 

Здесь я рисовать/печать " Magic "на экран:

Printf_xy(123,223,player[0].Magic[0]); //Crash 
Printf_xy(123,233,player[1].Magic[0]); //Crash 
Printf_xy(123,243,player[2].Magic[0]); //Crash 
Printf_xy(123,253,player[3].Magic[0]); //Prints "Cure" does not crash 

Как вы можете видеть, он будет работать, но только если я покажу плеер [3]. Я уверен, что забываю что-то сделать или что-то неправильно инициализировать. Любая помощь будет принята с благодарностью.

+0

ли первые 3 игрока типа Knight? – Alex

+0

Нет, например, плеер [0] также может быть установлен на ниндзя, и при попытке отобразить «Магию» он сработает. – malachi

+0

'const char * Magic [];' не разрешен в C++; если ваш компилятор не жалуется, посмотрите, какие флажки компиляции вы используете. –

ответ

1

Magic - массив нулевой длины - когда вы назначаете что-либо в него или пытаетесь получить доступ к Magic[0], вы получаете доступ за пределами границ массива.

Если вы знаете, максимальное количество магических записей, которые нужно использовать, что в качестве размера массива, что-то вроде:

const int MagicLimit = 10 

... 

const char* Magic[MagicLimit]; 

еще лучше, если вы используете C++, используйте зЬй :: вектор для хранения магические строки (также используйте std :: string), таким образом вы можете легко рассказать длину списка.

Например:

std::vector<std::string> Magic; 
+0

The Dark спасибо за это предложение! Это сработало, и теперь я могу продолжить игру. – malachi

Смежные вопросы