
숫자 야구 게임을 만드는 강의를 듣고 과제를 진행하고 있다. 해당 과제에서 나오는 함수가 어려워 여기에 작성을 하고 해석을 해본다.
JudgeResult함수로 스트라이크인지, 볼인지 판정하는 함수이다.
FString AHWGameModeBase::JudgeResult(const FString& InSecretNumberString, const FString& InGuessNumberString)
{
int32 StrikeCount = 0, BallCount = 0;
for (int32 i = 0; i < 3; ++i)
{
if (InSecretNumberString[i] == InGuessNumberString[i])
{
StrikeCount++;
}
else
{
FString PlayerGuessChar = FString::Printf(TEXT("%c"), InGuessNumberString[i]);
if (InSecretNumberString.Contains(PlayerGuessChar))
{
BallCount++;
}
}
}
if (StrikeCount == 0 && BallCount == 0)
{
return TEXT("아웃");
}
return FString::Printf(TEXT("%d 스트라이크 %d 볼"), StrikeCount, BallCount);
}
int32 StrikeCount = 0, BallCount = 0;
스트라이크와 볼이 모두 0으로 시작한다.(초기값)
for (int32 i = 0; i < 3; ++i)
{
if (InSecretNumberString[i] == InGuessNumberString[i])
{
StrikeCount++;
}
...
for문으로 세 자리 숫자의 각 자리를 비교한다.
자리와 숫자가 같으면 Strike
else
{
FString PlayerGuessChar = FString::Printf(TEXT("%c"), InGuessNumberString[i]);
if (InSecretNumberString.Contains(PlayerGuessChar))
{
BallCount++;
}
}
추측한 숫자가 정답 숫자 안에 포함되어 있는지 확인한다.
자리 숫자가 다르면 Ball
if (StrikeCount == 0 && BallCount == 0)
{
return TEXT("아웃");
}
Strike도 아니고 Ball도 아니면 아웃 결과를 출력한다.
return FString::Printf(TEXT("%d 스트라이크 %d 볼"), StrikeCount, BallCount);
Strike와 Ball이 나오면 1 스트라이크 2볼과 같이 출력한다.
간단한 게임이지만 코드로 작성했을 때 코드 일고 해석하는게 어려워 이해하기 위해 작성해보았다.
간단한 로직이지만 네트워크 환경으로 코드를 작성하니 복잡하게 느껴진다.
9번 과제(숫자 야구 게임 만들기) 진행