Примечание. Это домашнее задание.
Я пытаюсь сделать программу, которая играет в игру Pig! Свинья - игра со следующими правилами:
1. First to get 100 GAME POINTS is the victor. 2. On your turn, you roll a dice. If you get a 1 at any roll, you end your turn and add 0 to your GAME SCORE. 3. If you roll any value other than a 1, you have the option to HOLD or PLAY. If you PLAY, your roll is added to your TURN SCORE and you roll again. If you HOLD, your TURN SCORE is added to your GAME SCORE and the turn passes to the computer.
Игра идет очень легко, пока я не перейду к следующей проблеме (см. Код):
int player(){
char PlayAgain = 'Y';
int turn_score = 0;
while (PlayAgain != 'N' || PlayAgain != 'n'){
int dice;
srand(time(NULL));
dice = rand() % 6 + 1;
turn_score = turn_score + dice;
if (dice != 1){
cout << "You rolled a " << dice << "! Would you like to roll again? [Y/N]: ";
cin >> PlayAgain;
if (PlayAgain == 'N' || PlayAgain == 'n'){
/*END TURN AND return turn_score;*/
}
}
if (dice == 1){
cout << endl << "Oops! You rolled a 1! Your turn is ended, and you add nothing to your score.\n";
system("PAUSE");
/*END TURN, NO SCORE ADDED*/
}
}
}
Как я могу заставить программу закончить цикл преждевременно (если либо воспроизвести HOLDS или Dice == 1) и вернуть правильное значение (если HOLD, return turn_score. Else return 0)? [См. Два отмеченных раздела]
Вы можете использовать break
для выхода из цикла. Поскольку вы говорите, что хотите вернуть "правильное значение", вы должны сделать что-то вроде этого:
В первом условии if
if (PlayAgain == 'N' || PlayAgain == 'n'){
/**Game-Specific logic here**/
return turn_score
}
а на втором:
if (dice == 1){
cout << endl << "Oops! You rolled a 1! Your turn is ended, and you add nothing to your score.\n";
/**Game-Specific logic here**/
cin.get();
return turn_score;
}
Оператор return не должен находиться в конце функции, и более чем один оператор возврата может сосуществовать внутри одной и той же функции
return
не может быть в цикле. Таким образом, return
немедленно завершает функцию?
Вместо того, чтобы исправить ваш код, я хотел бы дать вам понять, что на самом деле нужно здесь.
Когда-либо слышал о break;
statement.Пожалуйста, ознакомьтесь с простым примером, см. следующий фрагмент кода, в котором ваша программа принимает данные от пользователя, и продолжает принимать данные от пользователя до тех пор, пока вы не нажмете "A",
char var;
while(true)
{
cin>>var;
if(var=='A') break;
}
Теперь в этой программе цикл while установлен в true
и будет продолжать работать и принимать входные данные от пользователя, а оператор if не будет работать до тех пор, пока пользователь не введет "A". И в тот момент, "A" задается в качестве входных данных, break
будет взять контроль из в while
циклы для вас.
Как насчет того, чтобы ваш оператор return (с правильным значением в зависимости от случая) внутри вашего цикла? Это сломает как цикл, так и функцию, но возвращает требуемое значение.
break
когда условие выполнено.while
, было бы это? Если нет, то перерыв не достигает того, что мне нужно.