#c #random
#c #Случайный
Вопрос:
Кто-нибудь, пожалуйста, поможет мне разобраться в этом? Я пишу программу под названием «Игра в угадайку», в которой игроку (ам) предлагается угадать случайное число, сгенерированное компьютером, в диапазоне от 1 до 100. Моя проблема, которую я обнаружил, заключается в том, что когда вы выбираете двух игроков, и каждый игрок начинает угадывать, оказывается, что компьютер выбрал случайное число для обоих игроков. Я не понимаю, почему это происходит, потому что я присваиваю случайное число одной переменной «compSelect» и проверяю его на соответствие предположениям каждого игрока. Я попытался выполнить поиск по этому вопросу на этом сайте, но смог найти только то, почему компьютер дважды запрашивал одного и того же игрока. Однако это не то, что я ищу.
На моем выводе, когда игрок 1 и игрок 2 каждый раз угадывают ответ друг друга, например, игрок 1 угадывает: 10, игрок 2 угадывает: 10; игрок 1 угадывает: 15, игрок 2 угадывает: 15; программа в конечном итоге скажет «угадай ниже» для игрока 1 и «угадай выше» для игрока 2. Кто-нибудь знает, почему это? Я хочу, чтобы оба игрока угадывали одно и то же число.
ОБНОВЛЕНИЕ: я не знаю, как вставить сюда вывод, поэтому я просто введу результаты теста:
Добро пожаловать в игру и тому подобное. Компьютер выбрал число. Вы можете начать угадывать.
Предположение игрока 1: на 10 меньше.
Предположение игрока 2: на 10 угадайте больше
Игрок 1 угадывает:
Это мой код для выбора двух игроков. Я использую Code::Blocks 16.01.
#include <iostream>
#include <iomanip>
#include <cmath> //needed for pow() and ceil() ///also rand()
#include <conio.h> //needed for kbhit()
#include <windows.h> //needed for Sleep()
#include <cstdlib> //needed for srand() and rand()
#include <time.h> //needed for time()
using namespace std;
int main()
{
int waitTime = pow(100,2); //amount of time computer will pause for
int A, B, Y; //switch-case arguments //if-else
int i = 0;
int play1Guess, play2Guess, compSelect; //player guesses amp; computer's selection ///while, if-else
int numGuess1, numGuess2, numGuessSum1 = 0, numGuessSum2 = 0; //guess counter
int gamesPlay = 0; //games played counter
double guessWinAvg1, guessWinAvg2; //average number of guesses it took before guessing the correct number
char playerCount, replayGuessGame; //switch-case expression //if-else
while (true) { //an infinite amount of runs until user selects N when prompted
cout << "n WELCOME TO THE GEUSSING GAMEn"
<< " ------------------------------------------------------------nn"
<< setw(67) << "The computer will select a random number from 1-100.n"
<< setw(53) << "Try to guess the number.n"
<< setw(71) << "The player who guesses correctly with the fewest tries wins.n"
<< setw(56) << "Exit the game by guessing 0.nn"
<< setw(47) << "Good luck!nn";
system("pause"); //prompts user to continue
cout << "nn A - 1 Player"
<< "n B - 2 Players"
<< "nnHow Many Players?: ";
cin >> playerCount; //allows user to play with friends
switch (playerCount) { //game-play start
case 'B':
numGuess2 = 0; //resets guess count each instance
gamesPlay ; //increments games played counter for player 1
cout << "nPlease wait while the computer selects a number . . .";
srand(time(NULL)); //randomizes first seed int value each game
compSelect = 1 rand() % 100; //selects a random number between 1-100
Sleep(waitTime); //pauses program for set amount of time
cout << "nnThe computer has selected a number. You may begin guessing.nnn";
cout << "Player 1 Start: ";
cin >> play1Guess; //stores player's guess
numGuess1 ; //counts number of guesses player takes
while ((play1Guess != 0) || (play2Guess != 0)) { //if player guesses 0 - exits game
if ((play1Guess > compSelect) || (play2Guess > compSelect)) {
cout << "nGuess Lower.nnn";
}
else if ((play1Guess < compSelect) || (play2Guess < compSelect)) {
cout << "nGuess Higher.nnn";
}
else if ((play1Guess == compSelect) || (play2Guess == compSelect)) {
cout << "nCorrect!";
break; //prevents program from asking player to guess again
}//end if-else chain
int playType = 2; //size of array based on number of players ///array, nested if-else
string switchTurns[playType] = {"Player 2 Guess: ", "Player 1 Guess: "}; //{switchTurns[0], switchTurns[1]}
for (; i >= 0;) { //allows player to guess multiple times
if (i == 0) { //if i is an odd integer
cout << switchTurns[i]; //Player 2
cin >> play2Guess;
numGuess2 ; //counts player 2 guesses
i ; //increments i so else statement is true next time through
}
else { //if i is an even integer
cout << switchTurns[i]; //Player 1
cin >> play1Guess;
numGuess1 ; //counts player 1 guesses
i--; //decrements i so if statement is true next time through
}
break; //forces program to reenter while loop
}//end for loop
}//end inner while loop
cout << "Good Game!";
cout << "Would you like to play again? <Y/N>: ";
cin >> replayGuessGame;
if (replayGuessGame == 'Y') //Replay
; //null
else { //No replay
guessWinAvg1 = numGuess1/double (gamesPlay); //avg guesses before winning for player 1
guessWinAvg2 = numGuess2/double (gamesPlay); //" player 2
cout << "You played " << gamesPlay << " time(s)." << "nn";
if (numGuess1 < numGuess2) {
cout << "Congratulations Player 1!!nYou won The Guessing Game!"
<< "nnYour average number of guesses beforenguessing the correct number was "
<< guessWinAvg1 << "." << endl;
cout << "Player 2 lost The Guessing Game!"
<< "nnYour average number of guesses beforenguessing the correct number was "
<< guessWinAvg2 << "." << endl;
}//if
else if (numGuess2 < numGuess1) {
cout << "Congratulations Player 2!!nYou won The Guessing Game!"
<< "nnYour average number of guesses beforenguessing the correct number was "
<< guessWinAvg2 << "." << endl;
cout << "Player 1 lost The Guessing Game!"
<< "nnYour average number of guesses beforenguessing the correct number was "
<< guessWinAvg1 << "." << endl;
}//else-if
return 0; //terminates program //placed here to accommodate for continue (replay)
}//end outer if-else
break; //exits switch-case
default: //included as a precaution
cout << "nInvalid Option.nn";
}//switch-case
cout << "nnn"; //separates first game display from second game display
continue; //allows player to replay Guessing Game
}//end outer while loop
}//end main
Спасибо всем, кто помогает. Я действительно ценю это!
Комментарии:
1.
if ((play1Guess > compSelect) || (play2Guess > compSelect)) {
Вы предположительно даете подсказку одному игроку — почему вы проверяете догадки обоих игроков, чтобы сгенерировать эту подсказку?2. @Xunie Извините, я отредактирую это в.
3. @Igor Tandetnik Я думал, что должен, поэтому компьютер скажет игроку 2 угадать большее / угадать меньшее / также правильно
4. Если
play1Guess
значение меньше иplay2Guess
больше (или наоборот), вы попросите обоих игроков угадать меньшее. Это то, чего вы хотите? Для меня это не имеет особого смысла.5. Нет. Я хочу, чтобы он проверял, является ли предположение игрока меньше, больше или равно выбранному компьютером, а затем предлагал игроку угадать меньше, угадать выше или исправить. Однако, @Xunie (я только что обновил, как выглядит выводимый дисплей, кстати), когда оба игрока угадывают одно и то же число, это дает разную обратную связь..