[9번 과제] 숫자 야구 게임
판정과 난수 생성 로직은 별도의 C++ 라이브러리로 분리해서 구현하고 그 외는 블루프린트로 구현하라고 하셔서 그렇게 과제를 진행했는데 오히려 블루프린트가 더 미숙해 생각보다 시간이 좀 걸렸습니다.
참고로 2주차 강의 채팅 따라 하기에 추가로 구현한 과제입니다. 해당 내용은 아래 블로그에 정리해 놓았습니다.
https://dev0404.tistory.com/68
[내일배움캠프 Day58] 채팅 따라하기
Listen Server를 이용해 RPC를 호출해서 채팅을 만드는 강의를 듣고 정리해보았습니다. 전체 Flow서버 사용자가 Host, 클라이언트 사용자는 Guest로 UserID를 할당한다.채널에 참가하면 사용자의 ID를 출
dev0404.tistory.com
일단 판정과 난수 생성 로직은 아래와 같습니다.
#include "BullsAndCows.h"
FString UBullsAndCows::GenerateRandomNumber()
{
TArray<int32> Numbers;
for (int32 i = 1; i <= 9; i++)
{
Numbers.Add(i);
}
FString Result;
for (int32 i = 0; i < 3; i++)
{
int32 Index = FMath::RandRange(0, Numbers.Num() - 1);
Result.Append(FString::FromInt(Numbers[Index]));
Numbers.RemoveAt(Index); // 중복 방지
}
return Result;
}
FString UBullsAndCows::CheckBullsAndCows(const FString& ServerNumber, const FString& PlayerNumber)
{
int32 Strikes = 0;
int32 Balls = 0;
for (int32 i = 0; i < 3; i++)
{
if (ServerNumber[i] == PlayerNumber[i]) // 자리와 값이 같으면 S 증가
{
Strikes++;
}
else if (ServerNumber.Contains(FString::Chr(PlayerNumber[i]))) // 값만 포함되면 B 증가
{
Balls++;
}
}
return FString::Printf(TEXT("%dS%dB"), Strikes, Balls);
}
bool UBullsAndCows::ValidatePlayerNumber(const FString& PlayerNumber)
{
// 3자리 숫자인지 체크
if (PlayerNumber.Len() != 3)
{
return false;
}
// 중복된 숫자 있는지 체크
TSet<TCHAR> UniqueNumbers;
for (TCHAR Char : PlayerNumber)
{
if (UniqueNumbers.Contains(Char))
{
return false;
}
UniqueNumbers.Add(Char);
}
return true;
}
블루프린트 내용은 전부 설명하기보다는 핵심 내용만 설명하면
Rule에서 "/"가 있어야 응답 패턴으로 간주하므로 채팅을 입력할 때
Left 를 통해 첫 글자를 가져와서 “/”와 비교해서 true라면 문자열의 왼쪽에서 N개의 문자를 제거한 나머지 부분을 반환하는 함수 Right Chop 를 사용해서 “/”를 뺀 나머지를 보냈습니다.
만약 “/” 로 시작하지않으면 응답 패턴으로 간주하지 않고, 입력창 비웠습니다.
현재 턴인 경우, ValidatePlayerNumber 를 통해 올바른 숫자인지 체크하고, false라면 OUT을 출력하고 true라면 CheckBullsAndCows 를 통해 정답과 비교하고 출력하도록 구현했습니다.
턴이 시작되면, 기존 타이머를 정리하고, 새 타이머를 설정한 뒤, 모든 플레이어에게 현재 턴 정보를 알려줍니다.
구현 결과 아래와 같이 출력됩니다.
턴이 10초마다 넘어가도록 구현하였으며, 승리/패배할 경우 각 플레이어의 스코어도 출력하도록 구현하였습니다.
'내일배움캠프 > TIL' 카테고리의 다른 글
[내일배움캠프 Day85] Unreal Engine AI 기초 (5) | 2025.04.21 |
---|---|
[내일배움캠프 Day75] 1주차 멀티플레이 팀플 (0) | 2025.04.07 |
[내일배움캠프 Day58] 채팅 따라하기 (0) | 2025.03.13 |
[내일배움캠프 Day56] 브루트포스 과제 (1) | 2025.03.11 |
[내일배움캠프 Day55] GGF 프로젝트 1주차 WIL (0) | 2025.03.10 |