Reworked the user input in the game class.

This commit is contained in:
2023-08-03 01:00:32 +03:00
parent 7669dff7a6
commit e75d82e896

View File

@@ -34,6 +34,7 @@ void CGame::Init()
void CGame::Start()
{
CStep step;
int ret = 0;
while (!m_fGameIsEnd)
@@ -45,8 +46,9 @@ void CGame::Start()
ShowGuessedNumber(true);
#else
ShowGuessedNumber(false);
#endif // DEBUG
#endif // _DEBUG
PrintSteps();
ret = GetNumber(step);
switch (ret)
{
@@ -57,17 +59,17 @@ void CGame::Start()
}
case -2:
{
m_sLastError = L"Вы должны ввести " + std::to_wstring(m_ucDigits) + L"-значное число!";
//m_sLastError = L"Вы должны ввести " + std::to_wstring(m_ucDigits) + L"-значное число!";
break;
}
case -3:
{
m_sLastError = L"Цифры в числе не должны повторяться!";
//m_sLastError = L"Цифры в числе не должны повторяться!";
break;
}
default:
{
m_sLastError = L"";
//m_sLastError = L"";
break;
}
}
@@ -81,6 +83,40 @@ void CGame::Start()
PrintGameFooter();
}
int CGame::GetNumber(CStep step)
{
std::wcout << L"\t\t\t\t\t" << m_sLastError << L"\r";
std::wcout << L"=>\t";
CUserInput userInput(m_ucDigits);
if (userInput.Get())
{
for (unsigned i = 0; i < userInput.m_vUserInput.size(); i++)
{
if (IsEqual(userInput.m_vUserInput, userInput.m_vUserInput.at(i), i))
{
m_sLastError = L"Цифры в числе не должны повторяться!";
return -3;
}
}
}
else
{
m_sLastError = L"Вы должны ввести " + std::to_wstring(m_ucDigits) + L"-значное число!";
return -2;
}
step.StoreStepNumber(userInput.m_vUserInput);
step.CheckForAnimals(m_uGuessedNumber, m_ucDigits);
m_Steps.push_back(step);
if (step.GetStepAnimals().first == m_ucDigits) m_fGameIsEnd = true;
m_sLastError = L"";
return 0;
}
void CGame::ShowGuessedNumber(bool show)
{
std::wcout << '\t';
@@ -125,44 +161,6 @@ void CGame::PrintSteps()
}
}
int CGame::GetNumber(CStep step)
{
std::vector<int> digits;
std::wstring sNumber;
wchar_t c;
std::wcout << L"\t\t\t\t\t" << m_sLastError << L"\r";
std::wcout << L"=>\t";
std::wcin >> sNumber;
if (sNumber == L"Q" || sNumber == L"q") return -1;
if (sNumber.length() != m_ucDigits) return -2;
for (int i = 0; i < sNumber.length(); i++)
{
c = sNumber[i];
int r = std::iswdigit(c);
if (!(bool)r)
{
return -2;
}
else
{
if (IsEqual(sNumber, c, i))
{
return -3;
}
digits.push_back(((int)c) - 48); // Convert from char 'n' to number n
}
}
step.StoreStepNumber(digits);
step.CheckForAnimals(m_uGuessedNumber, m_ucDigits);
m_Steps.push_back(step);
if (step.GetStepAnimals().first == m_ucDigits) m_fGameIsEnd = true;
return 0;
}
CGame::CGame()
{
CUserInput userInput(1);