
숫자 야구 게임을 만드는 강의를 듣고 과제를 진행하고 있다. 해당 과제에서 나오는 함수가 어려워 여기에 작성을 하고 해석을 해본다. IsGuessNumberString는 제시된 문자열이 추측하는 숫자 문자열인지 확인 하는 함수이다.
bool ACXGameModeBase::IsGuessNumberString(const FString& InNumberString)
{
bool bCanPlay = false;
do
{
if (InNumberString.Len() != 3)
{
break;
}
bool bIsUnique = true;
TSet<TCHAR> UniqueDigits;
for (TCHAR C : InNumberString)
{
if (FChar::IsDigit(C) == false || C == '0')
{
bIsUnique = false;
break;
}
UniqueDigits.Add(C);
}
if (bIsUnique == false)
{
break;
}
bCanPlay = true;
} while (false);
return bCanPlay;
}
bool bCanPlay = false;
기본 값으로 false를 설정한다.
if (InNumberString.Len() != 3)
{
break;
}
문자열의 길이가 3이 아니면 끝낸다.
bool bIsUnique = true;
TSet<TCHAR> UniqueDigits;
for (TCHAR C : InNumberString)
{
if (FChar::IsDigit(C) == false || C == '0')
{
bIsUnique = false;
break;
}
UniqueDigits.Add(C);
}
각 문자를 순회하면서 숫자가 아닌 경우, 0인 경우 -> false
그렇지 않으면 UniqueDigits 집합에 추가(중복 제거)
모든 문자가 숫자이며, '0'이 아니고 중복되지 않아야 한다.
if (bIsUnique == false)
{
break;
}
bCanPlay = true;
bIsUnique 값이 false면 멈추고
조건이 모두 만족하면 bCanPlay = true
결과를 반환한다.
do{...} while(false)는 여러 조건을 진행하면서 break를 만나 진행을 멈추고 마지막 return에 결과를 반환한다.
간단한 게임이지만 코드로 작성했을 때 코드 일고 해석하는게 어려워 이해하기 위해 작성해보았다.
do while 문이 어려워 보이지만 의외로 간단한 내용이었다.
9번 과제(숫자 야구 게임 만들기) 진행