Недавно я работал над системой инвентаризации для текстовой игры, в которой используется глобальный массив для системы инвентаризации и соответствующая функция для чтения истинного или ложного в указанном массиве , Проблема я столкнулся это функция, я использую, чтобы изменить массивКак сделать функцию глобальным глобальным массивом
void playerGet(bool items[], int itemNumber) //this function takes an assigned argument of the array indices variable, and changes that array indices from true, to false.
{
items[itemNumber] = true;
}
только изменяет массив в пределах области видимости функции его размещались в. Массив определен в файле .cpp как это:
void inventoryArray(bool items[]) //This function establishes all the items in the game, the true false statement expresses whether or not the item is in the player's inventory.
{
items[WEAPON_RELIC_RIFLE] = false;
items[WEAPON_SCALPEL] = false;
items[MISC_ACTION_FIGURE] = false;
items[MISC_FIRE_EXTINGUISHER] = false;
items[MISC_LIFE_RAFT] = false;
}
и затем объявлен в файле .h, как это:
void inventoryArray(bool items[]);
перечислений, используемые в массиве определены в файле заголовка, как это:
enum equipment //This declares a list of enums for each item in the game, consumables, not included.
{
WEAPON_RELIC_RIFLE, // = 0
WEAPON_SCALPEL, // = 1
MISC_ACTION_FIGURE, // = 2
MISC_FIRE_EXTINGUISHER, // = 3
MISC_LIFE_RAFT, // = 4
MAX_EQUIPMENT
};
функция, которая считывает массив инвентаризации заключается в следующем:
void twoScavengerCombat(bool items[])
{
for (int item = 0; item < MAX_EQUIPMENT; ++item)
{
if (items[item] == true) //if true proceed
{
switch (item)
{
case 0: //if array indices identifier = 0, print relic rifle
cout << "1: Use the Relic Rifle\n";
break;
case 1:
cout << "2: Use the Scalpel\n";
break;
case 2:
break;
case 3:
cout << "3: Use the Fire Extingusher\n";
break;
case 4:
cout << "4: Use the Life Raft\n";
break;
default:
cout << "Error";
break;
}
}
else
cout << "Option Unavailible\n"; //if false print Option Unavailible
}
компиляции с массивами и Перечисления заголовки объявили основной файл будет выглядеть следующим образом:
int toolSearch()
{
bool items[MAX_EQUIPMENT];
inventoryArray(items);
playerGet(items, 0);
}
void twoScavengerCombat(bool items[])\\ declared in this file, but since its just above here i left it as a forward declaration to save space
int main()
{
toolSearch();
twoScavengerCombat(items);
return 0;
}
В идеале это будет произвести результат: Использовать реликвенную винтовку Опция недоступна Опция недоступна Опция недоступна Опция Недоступна
, но вместо этого она производит 5 вариантов недоступных. Что мне не хватает?
«Элементы», объявленные в 'toolSearch()', являются локальными для этой функции и будут переопределять любой объявленный глобальный массив. –
@JonathanPotter, do вы подразумеваете тот, который объявлен в 'inventoryArray (items)'? Если да, то как вы предлагаете изменить его, потому что я просто попытался удалить эту строку, и результат не изменился. –
@ SawyerAdlaiVierra-Hatch 'inventoryArray' не объявляет никаких массивы.Как бы он ни выглядел, это не так. На самом деле ни один из фрагментов кода не объявляет глобальный массив. – PaulMcKenzie