Так что для части моей домашней работы мне нужно сделать текстовую игру в стиле yahtzee. В данный момент я работаю над массивом для хранения значений костей. Моя проблема заключается в возможности передать массив в функцию для изменения значений, а затем снова использовать этот измененный массив. Изначально я хотел сделать это с помощью ссылок или указателей. У меня были проблемы с этим, и я не смог найти способ компиляции. Сегодня я поговорил со своим учителем, который сказал мне, что массивы можно обычно изменять внутри функции, а затем использовать снова, по сути говоря, что они передаются по ссылке автоматически.
Может кто-нибудь уточнить, что означает мой учитель, и если это правильно. Кроме того, какой метод вы бы порекомендовали, ребята. Ниже моя текущая реализация пытается использовать ссылки
/******************************************************
** Function: runGame
** Description: Runs game and keeps track of players
** Parameters: # of players
** Pre-Conditions: c is an integer from 1 to 9
** Post-Conditions:
******************************************************/
void runGame(int players) {
Player p = new Player[players]; //needs to be deleted at the end
int dice[] = { -1, -1, -1, -1, -1 };
int category; // used to hold category chosen
while (isGameOver(p)) {
for (int i = 0; i < players; i++) {
rollDice(dice); //uses reference
p[i].scoreBoard= updateScore(p[i], dice);
p[i].catsLeft--;
}
}
}
/******************************************************
** Function: rollDice
** Description: rolls dice, prints array and either rerolls
** Parameters: int[] dice
** Pre-Conditions:
** Post-Conditions:
******************************************************/
void rollDice(int (&dice) [5]) {
int again;
string indices; // indices of dice to reroll
cout << "Your dice are" << endl;
for (int i = 0; i < 5; i++) {
dice[i] = rand() % (6) + 1;
cout << dice[i];
}
for (int i = 0; i < 2; i++) {
cout << "Roll again? Type anything except 0 to go again." << endl;
cin >> again;
if (again) {
cout << "Type each index without a space that you would like to reroll";
cin.ignore();
getline(cin, indices);
for (int i = 0; i < indices.length(); i++) {
dice[(int)indices[i] - '0'] = rand() % (6) + 1;
}
}
else
break;
}
}
В настоящее время я получаю ошибки компилятора, говорящие
ошибка: нет совпадения для «оператора []» (типы операндов - «Игрок» и
«INT»)
p [i] .scoreBoard = updateScore (p [i], игра в кости);
И последующие для других раз, когда я пытаюсь использовать p [i]