mirror of
https://gitflic.ru/project/w0lf/bulls-and-cows-cpp.git
synced 2026-03-28 16:02:46 +03:00
Reworked the user input in the game class.
This commit is contained in:
@@ -34,6 +34,7 @@ void CGame::Init()
|
|||||||
void CGame::Start()
|
void CGame::Start()
|
||||||
{
|
{
|
||||||
CStep step;
|
CStep step;
|
||||||
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
while (!m_fGameIsEnd)
|
while (!m_fGameIsEnd)
|
||||||
@@ -45,8 +46,9 @@ void CGame::Start()
|
|||||||
ShowGuessedNumber(true);
|
ShowGuessedNumber(true);
|
||||||
#else
|
#else
|
||||||
ShowGuessedNumber(false);
|
ShowGuessedNumber(false);
|
||||||
#endif // DEBUG
|
#endif // _DEBUG
|
||||||
PrintSteps();
|
PrintSteps();
|
||||||
|
|
||||||
ret = GetNumber(step);
|
ret = GetNumber(step);
|
||||||
switch (ret)
|
switch (ret)
|
||||||
{
|
{
|
||||||
@@ -57,17 +59,17 @@ void CGame::Start()
|
|||||||
}
|
}
|
||||||
case -2:
|
case -2:
|
||||||
{
|
{
|
||||||
m_sLastError = L"Вы должны ввести " + std::to_wstring(m_ucDigits) + L"-значное число!";
|
//m_sLastError = L"Вы должны ввести " + std::to_wstring(m_ucDigits) + L"-значное число!";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case -3:
|
case -3:
|
||||||
{
|
{
|
||||||
m_sLastError = L"Цифры в числе не должны повторяться!";
|
//m_sLastError = L"Цифры в числе не должны повторяться!";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
m_sLastError = L"";
|
//m_sLastError = L"";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -81,6 +83,40 @@ void CGame::Start()
|
|||||||
PrintGameFooter();
|
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)
|
void CGame::ShowGuessedNumber(bool show)
|
||||||
{
|
{
|
||||||
std::wcout << '\t';
|
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()
|
CGame::CGame()
|
||||||
{
|
{
|
||||||
CUserInput userInput(1);
|
CUserInput userInput(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user