diff --git a/bulls-and-cows-cpp/CGame.cpp b/bulls-and-cows-cpp/CGame.cpp index f6db310..3bfbd42 100644 --- a/bulls-and-cows-cpp/CGame.cpp +++ b/bulls-and-cows-cpp/CGame.cpp @@ -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 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);