Рейтинг:
5
OriginalGriff
Во - первых, вам нужно начать с зацикливания на первом выборе пользователя: если они вводят "недопустимый ввод", то он жалуется, но все равно позволяет им играть-это плохо. Добавьте переменную "допустимая запись" и повторяйте цикл до тех пор, пока не получите ее.
Во-вторых, вам нужен второй цикл для ввода пользователем самой игры. На этот раз вы зацикливаетесь на количестве раундов, выбранных пользователем: 3, 5 или 7.
Я бы сделал это так: абстрагировал код в функции: начните с функции GetRounds:
int GetRounds()
{
bool isValid = false;
int numberRounds = 0;
while (!isValid)
{
cout << "Do you want to play 3, 5 or 7 rounds?" << endl;
cin >> numberRounds;
switch(numberRounds)
{
case 3:
case 5:
case 7:
isValid = true;
break;
default:
cout << "Invalid input. Enter 3, 5 or 7." << endl;
break;
}
}
cout<<"You picked best of " << numberRounds << " rounds."<<endl;
return numberRounds;
}
Затем вызовите это из вашей основной функции.
Добавьте вторую функцию "PlayRound" - вы можете написать ее сами - и используйте
for
цикл, чтобы вызвать его количество раз, что пользователь выбрал.
Пусть функция PlayRounds возвращает 1 для выигрыша игрока, -1 для выигрыша компьютера и 0 для ничьей, а затем суммирует каждый результат. В конце концов, положительный итог-это выигрыш игрока за сеанс, отрицательный-победа компьютера.
Начните с этого и посмотрите, как далеко вы продвинетесь.
Member 13109743
Что касается функции PlayRound, то как можно использовать информацию, собранную из GetRounds, поскольку они являются локальными областями? То же самое можно сказать и о сравнении выбора пользователей с выбором компьютеров, поскольку выбор компьютеров находится в классе - как бы я получил к нему доступ?
OriginalGriff
PlayRound не нуждается в доступе к информации из GetRounds: он играет один раунд и возвращает результат.
Внешний мир - в данном случае основная функция-вызывает его столько раз, сколько ему нужно.
Что касается компьютерного класса - создайте экземпляр в Main и передайте его функции PlayRound.
Есть смысл?
Member 13109743
Да, я думаю, что это имеет смысл. Я буду возиться с ним еще больше, я дам тебе знать.
Member 13109743
Я теряюсь, пытаясь понять, как спроектировать петлю.
OriginalGriff
Насколько сложно "спроектировать" цикл for? :смеяться:
Все, что ему нужно, - это число, которое начинается с 1 (или нуля) и позволяет ему циклически повторять количество введенных ими значений...
Подумай об этом!
Member 13109743
Ха. Я знаю, «как» создать цикл for. Я имею в виду, что, будучи абсолютным любителем кодирования, я борюсь с тем, «какие переменные» следует поместить внутрь цикла и в тело цикла for? Я потратил последние 6 с половиной часов на то, чтобы возиться с этим и работать вместе с моими одноклассниками, которые так же плохо умеют кодировать, как и я, и никто не придумал решения, лол. В функции PlayRound я пытаюсь настроить цикл, который отслеживает 3, 5 или 7 раундов (можно ли это сделать с помощью одного цикла for?), А также отслеживает счет (потребуется ли для этого вложенный цикл for? ). Также в PlayRound вы упомянули, что я должен создать экземпляр класса, чтобы сравнивать вводимые пользователями данные на компьютеры.
OriginalGriff
Как я уже сказал, Не делайте этого в функции PlayRound. У него есть одна задача: сыграть один раунд; компьютер против игрока и вернуть результат этого раунда. Точно так же, как у вас есть "умственная функция", которая позволяет вам купить банку напитка в торговом автомате, вы используете эту функцию неоднократно, чтобы купить банку для себя и 4 друзей. "Умственная функция" не знает (или не заботится) о том, сколько банок вы хотите, она просто знает, как купить банку. Вы передаете ему деньги, а он возвращает банку с выпивкой.
Игровой раунд-это то же самое: вы передаете его противнику, он играет раунд, он возвращает результат. Он не знает и не заботится о том, сколько раз вы его вызываете, он каждый раз делает одно и то же.
Попробуйте это сделать: установите цикл в main и вызовите метод внутри него.
Member 13109743
Ах, я все еще не понимаю этого. Я сдал задание как есть, но меня беспокоит, что оно не завершено.
Это самое дальнее, что я получаю в своей петле, прежде чем начать гадать, что делать:
инт PlayRound() {
for (int i = 0; i & lt; ROUNDS; i++) {
}
}
OriginalGriff
Пожалуйста, начните обращать внимание на то, что Вы читаете:
"Как я уже сказал, Не делайте этого в функции PlayRound."
А ты что делаешь? Пытаюсь сделать это в функции PlayRound!
Вернитесь назад, прочтите все это снова и подумайте об этом, вместо того чтобы делать предположения и игнорировать то, что вам говорят! :смеяться:
Member 13109743
Что касается моей частной переменной класса randNum, мой инструктор сказал: "int randNum = rand () % 5 + 1; вот для чего нужен конструктор. Ты не посеял его. Это не работает." Я не понимаю, потому что рэнднум выполняет именно то, что должен.
OriginalGriff
Rand - это "генератор случайных чисел", что означает, что он использует сложный алгоритм для генерации псевдослучайной последовательности чисел. Если вы не" сеете " его, то он всегда генерирует одну и ту же последовательность чисел каждый раз, когда вы используете его - что не очень случайно! Если вы "посеяли" его, то он каждый раз начинается в другой точке последовательности, так что вы получаете более "реалистичную" игру.
Взгляните на документацию для rand:
http://www.cplusplus.com/reference/cstdlib/rand/
Он объясняет и демонстрирует, что нужно сделать, чтобы посеять последовательность.