타이틀화면에서 플레이어 이름을 입력받을 때 공백이나 이상한 문자들이 넘어가지 않도록 제한을 주었습니다.
플레이어의 이름도 너무 길면 UI가 망가지기 때문에 입력 길이에 제한을 주었습니다.
공백과 특수문자들을 입력이 되더라도 무시하게 제한하였고
영어 숫자 한글만 입력 가능하도록 하였습니다.

기존에 cin으로 입력 받도록 했지만 입력값을 하나하나 검사하기 위해 _getch()를 사용합니다.
string LogManager::PrintTitle()
{
DrawTitle();
int boxY = 20;
string enterName = "용사의 이름을 입력하시오: ";
string nameLimit = "영문/숫자 입력은 최대 10자, 한글입력은 최대 6자 입니다.";
string playerName;
Gotoxy(12, boxY + 3);
cout << nameLimit;
Gotoxy(12, boxY + 1);
cout << enterName;
while (true)
{
unsigned char ch = _getch();
if(ch == 0 || ch == 224) // 특수키(방향키 등) 입력 시 무시
{
_getch(); // 특수키는 두 번 입력되므로 한 번 더 읽어서 버립니다.
continue;
}
// 엔터
if (ch == '\r')
{
if (!playerName.empty())
break;
continue;
}
// 백스페이스
if (ch == '\b')
{
if (!playerName.empty())
{
unsigned char last = playerName.back();
if (last >= 0x80) // 한글 입력 시 2바이트이므로 두 글자 지우기
{
if (playerName.size() >= 2)
{
playerName.pop_back();
playerName.pop_back();
cout << "\b \b\b \b";
}
}
else
{
playerName.pop_back();
cout << "\b \b";
}
}
continue;
}
// 공백은 입력받지 않음
if (ch == ' ' || ch == '\t')
{
// 공백 입력 시 무시
continue;
}
if (ch >= 1 && ch <= 26) // Ctrl + 알파벳 같은 제어문자 무시
{
continue;
}
if ((ch >= 'A' && ch <= 'Z') ||
(ch >= 'a' && ch <= 'z') ||
(ch >= '0' && ch <= '9')) // 영문자 또는 숫자만 허용
{
if (playerName.size() < 10)
{
playerName += ch;
cout << ch;
}
continue;
}
if (ch >= 0x80) // 한글 입력 시 2바이트이므로 두 글자 읽어서 처리
{
unsigned char ch2 = _getch();
if (playerName.size() < 10)
{
playerName += ch;
playerName += ch2;
cout << ch << ch2;
}
continue;
}
}
return playerName;
}
아스키아트에 움직임을 추가했습니다.
몬스터의 대기 상태입니다. 좌우로 움직입니다.
'내일배움캠프' 카테고리의 다른 글
| 내일배움캠프 언리얼트랙 29일차 - 커리어데이(2) + 블렌더 (0) | 2026.06.02 |
|---|---|
| 내일배움캠프 언리얼트랙 26일차 - 팀프로젝트(5) (완료) (0) | 2026.05.28 |
| 내일배움캠프 언리얼트랙 24일차 - 팀프로젝트(3) (0) | 2026.05.26 |
| 내일배움캠프 언리얼트랙 23일차 - TextRPG 팀프로젝트(2) (0) | 2026.05.22 |
| 내일배움캠프 언리얼트랙 22일차 - TextRPG 팀프로젝트 (0) | 2026.05.21 |