# c++ text based football - how to have the cpu keep choosing a play from a menu until a condition is met

I am updating my post to include more of the code and cleaned up the function hopefully.

I am trying to write a function for the computer to keep calling a play in a do while loop (which I am assuming is correct) with a pause in between and for the menu to be brought up to the user after each selection from the playbook function that contains the playbook menu. I am not an expert with the cin operator, but my playbook function works perfectly when the user is entering the plays but the cursor hangs when it is calling the function_cpu (computer) for the computer to make the selection. I am sure I am missing something in the code here. I put some notes in the code below.

int playbook(int &playbook_choice) {

cout << "Please choose a play from the options below : " << endl;
cout << "================================================" << endl;
cout << "1." << plays[0] << endl;
cout << "2." << plays[1] << endl;
cout << "3." << plays[2] << endl;
cout << "4." << plays[3] << endl;
cout << "5." << plays[4] << endl;
cout << "6." << plays[5] << endl;
cout << "7." << plays[6] << endl;
cout << "8." << plays[7] << endl;
cout << "9." << plays[8] << endl;
cout << "10." << plays[9] << endl;
cout << "11." << plays[10] << endl;
cout << "12." << plays[11] << endl;
cout << "13." << plays[12] << endl;
cout << "14." << plays[13] << endl;
cout << "15." << plays[14] << endl;
cout << "16." << plays[15] << endl;
cout << "17." << plays[16] << endl;
cout << "18." << plays[17] << endl;
cout << "19." << plays[18] << endl;

cin >> playbook_choice;

do {

switch (playbook_choice) {

case 1:
cout << "You selected the" << " " << plays[0] << " " << "play" << endl;
break;
case 2:
cout << "You selected the" << " " << plays[1] << " " << "play" << endl;
break;
case 3:
cout << "You selected the" << " " << plays[2] << " " << "play" << endl;
break;
case 4:
cout << "You selected the" << " " << plays[3] << " " << "play" << endl;
break;
case 5:
cout << "You selected the" << " " << plays[4] << " " << "play" << endl;
break;
case 6:
cout << "You selected the" << " " << plays[5] << " " << "play" << endl;
break;
case 7:
cout << "You selected the" << " " << plays[6] << " " << "play" << endl;
break;
case 8:
cout << "You selected the" << " " << plays[7] << " " << "play" << endl;
break;
case 9:
cout << "You selected the" << " " << plays[8] << " " << "play" << endl;
break;
case 10:
cout << "You selected the" << " " << plays[9] << " " << "play" << endl;
break;
case 11:
cout << "You selected the" << " " << plays[10] << " " << "play" << endl;
break;
case 12:
cout << "You selected the" << " " << plays[11] << " " << "play" << endl;
break;
case 13:
cout << "You selected the" << " " << plays[12] << " " << "play" << endl;
break;
case 14:
cout << "You selected the" << " " << plays[13] << " " << "play" << endl;
break;
case 15:
cout << "You selected the" << " " << plays[14] << " " << "play" << endl;
break;
case 16:
cout << "You selected the" << " " << plays[15] << " " << "play" << endl;
break;
case 17:
cout << "You selected the" << " " << plays[16] << " " << "play" << endl;
break;
case 18:
cout << "You selected the" << " " << plays[17] << " " << "play" << endl;
break;
case 19:
cout << "You selected the" << " " << plays[18] << " " << "play" << endl;
break;
case 0:
std::exit(0);
break;
default:
cout << "Invalid selection!!! , Please enter a number from 1-19 to choose a play!" << endl;
break;
}

} while (playbook_choice > 19 || playbook_choice < 1);

return playbook_choice;


}

int function_CPU(int &cpu_random_play) {
// want this function to keep to looping and the cpu keep calling plays until downs > 4 -- with a pause in between
// so the end user can see what the cpu is calling

do {

//have CPU call a random play from the list -- not dependent on down and distance or offense/defense attribution
srand((unsigned)time(NULL));

//generate random 1 or 2 -- either qb sneak or off guard run
cpu_random_play = rand() % 2 + 1;

//calls this function which has a menu to a choose but then stops at the cin prompt
//from within that function

//for the player 1 function works perfectly but when the cpu is trying to access cin, prompt is
//waiting for user input and doesnt get the cpu input

playbook(playbook_choice);

//??? How to make the CPU automatically select a play!!!!!!!!
if (cpu_random_play == 1) {
//chooses the play 1 from the playbook menu
playbook_choice = 1;
playbook_qb_sneak(result, down, yards_to_go);
}

if (cpu_random_play == 2) {
//chooses the play 2 from the playbook menu
playbook_choice = 2;
off_guard_run(result, down, yards_to_go);
}

}while (player_control == 2 && down <= 4);

return cpu_random_play;


}

• Why are you trying to return multiple values? Your function only returns an int. – user1118321 Dec 15 '18 at 5:45
• Calling any AI or automated process a CPU is fine when you’re talking about a game with players, but very confusing when asking a question about programming. (The CPU is a component of your computer, not the coach-AI I’m assuming you mean.) – Bruno Ely Dec 15 '18 at 6:27
• It’s hard to tell what’s going on without the complete code. What’s in playbook(...)? – Bruno Ely Dec 15 '18 at 6:31