2026. 1. 13. 21:25ㆍ언리얼 7기 본캠프
코드카타 문제가 점점 어려워지고 있는 가운데, 함수를 찾아서 써야하는 문제가 많이 늘어나고 있음. 오늘도 substr를 기억해내지 못했다면 풀지 못했을 문제가 있었고, 다양한 함수의 응용 및 활용이 필요해질 것으로 보임
것보다 find의 사용률이 높아지고 있는데 이정도면 <algorithm>헤더를 기본으로 포함시켜야 하는게 아닐지...
// 인덱스 범위때문에 상당히 곤란했던 옹알이(2) 문제. 몇번이고 수치를 고치면서 했는지...
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<string> babbling) {
int answer = 0;
vector<string> can = {"aya","ye","woo","ma"};
for(string b : babbling){
bool found = false;
int pos = 0;
string prev = "";
while(pos<b.length()){
if (pos + 2 > b.length()) break;
auto it3 = find (can.begin(), can.end(), b.substr(pos,2));
if (it3 != can.end()){
if(pos>=2 && b.substr(pos,2) == prev) break;
found = true;
prev = b.substr(pos,2);
pos+=2;
continue;
} else found = false;
auto it2 = find (can.begin(), can.end(), b.substr(pos,3));
if (it2 != can.end()){
if(pos>=3 && b.substr(pos,3) == prev) break;
found = true;
prev = b.substr(pos,3);
pos+=3;
continue;
} else found = false;
if (!found) break;
}
if(pos>=b.length()) answer++;
}
return answer;
}
오늘 강의는 1-7강까지 완강하였고 1-5 ~ 1-7강을 다시 복습함. 기존 개념에 더해 리플렉션 시스템이라는걸 배웠는데... 아... Unreal C++로 넘어가면서 느낀거지만 기존 C++ 배웠던 내용에서는 필요한 함수나 뭐가 있으면 일단 다 만들어서 그 안에서 사용하는 느낌이 강했는데(라이브러리 제외 ㅎ 선구자분들 존경합니다 진짜로)
Unreal C++는 이미 만들어져있는 베이스 내에서 다양한걸 가져와서 사용해 만들어야 하는게 있고 이게 단순히 코드만 되는게 아닌 에디터와의 상호작용에서 오는 헷갈림과 복잡함때문에 머릿속에 정보가 쉽게 들어오지 않았음. 특히 UPROPERTY() 인자부분 설명을 들을땐 아...
그래서 오늘은 머리도 식힐 겸 개인 프로젝트를 하나 진행함. 어제 유튜브 숏츠를 보다가 구글 스네이크 게임 하는걸 보고 생각난 '어, 지금까지 배운 내용들이면 스네이크게임 구현이 가능하지 않을까?' 하는 생각에 진행한 C++ 스네이크 게임 프로젝트임

먼저 리포지토리를 올리고 설명함
https://github.com/Nichipe-JCM/Snake
GitHub - Nichipe-JCM/Snake: 간단한 스네이크게임 입니다
간단한 스네이크게임 입니다. Contribute to Nichipe-JCM/Snake development by creating an account on GitHub.
github.com



기본 구현 방식은 22x12 사이즈(벽을 제외하면 실 플레이 공간은 20x10) 의 이차원 벡터로 맵을 만들고, 좌표를 담은 구조체 Point를 생성. 좌표마다 숫자를 통해 수정할 수 있게 enum을 선언, for문을 돌아가며 맵을 생성함



그리고 키보드의 실시간 입력을 받아 방향을 결정하고(100ms마다 한칸 움직이는데, 누적 200ms가 되기 전까지 10ms마다 입력을 체크하고 최종적으로 200ms가 되기 직전에 누른 키로 방향이 결정됨) 진행방향을 받아 진행방향의 좌표를 받아오고, 그 좌표가 벽이냐, 빈공간이냐, 사과냐, 자신의 몸통이냐로 분기를 나눠 이벤트를 수행함.



기본적으로 뱀은 Point를 담은 벡터(이하 몸)를 사용하고, 벡터의 0번 인덱스가 머리가 됨
이동방식의 구현은 방향 기준 머리에서 다음위치 지정 -> 다음위치 체크(벽, 공백, 사과, 자신의 몸) ->
빈 공간일 경우
몸의 가장 마지막 원소를 back을 통해 지정 -> 맵의 해당 좌표를 공백으로 변경 -> 몸 pop_back -> insert를 통해 nextPos의 값을 begin 위치에 삽입 -> 맵의 nextPos위치를 다음 머리로 지정 -> 기존 머리였던 공간을 몸으로 변경 -> 이동한 방향 lastdir로 기록(키 입력시 버그 방지용)
사과일 경우
점수가 맵크기 - 기본길이 면 승리판정
꼬리 삭제 생략 + 머리 삽입 및 머리공간 몸 변경까진 동일 -> 사과의 위치를 랜덤하게 지정(이전 팀플때 배웠던 <random> 헤더를 이용, 빈공간인 곳으로) -> 해당 좌표에 사과를 설정하고 점수를 더함
벽이거나 몸이면 게임 오버

이상의 모든 연산을 마친 후 맵을 for문을 통해 출력함. enum으로 지정해둔 덕분에 아주 편하게 구분해서 작성할 수 있었음
머리의 경우 저장된 방향값을 기준으로 방향을 표기함

이외에도 팀플때 사용했던 커서 위치를 옮겨서 출력하는 기능을 응용해 화면 깜빡임 없이(cls는 화면 깜빡임때문에 실시간 갱신으로는 적합하지 않은 면이 있음) 출력되는 방식과 진행중 커서를 숨기는 기능을 응용해 더 깔끔하게 보이게 만듬
더 보기좋게 만들수도 있었지만 이번 프로젝트는 원하는 기능의 구현을 중심으로 잡았기 때문에 여기까지 하고 마무리함
좋은 경험이었음. 앞으로도 이런거 종종 만들 수 있으면 좋을 듯?
'언리얼 7기 본캠프' 카테고리의 다른 글
| 260115 TIL - Unreal C++ 6일차 (1) | 2026.01.15 |
|---|---|
| 260114 TIL - Unreal C++ 5일차 (0) | 2026.01.14 |
| 260112 TIL - Unreal C++ 3일차 (0) | 2026.01.12 |
| 260109TIL - Unreal C++ 2일차 (0) | 2026.01.09 |
| 260108 TIL - Unreal C++ 1일차 (0) | 2026.01.08 |