- 2024.9.27 ~ 2024.10.3 (7일)
- Windows
- C++
- Visual Studio 2022
이 프로젝트는 방향키 또는 WASD 키를 사용해 플레이어를 움직이며 탈출구를 찾아 나가는 미로 찾기 게임이다. 콘솔 프로젝트의 특성상 텍스트 기반으로 동작하게 되지만, 텍스트 만으로는 피로감이 누적될 수 있어, 더 직관적이고 간단하게 즐길 수 있는 미로 찾기 게임을 구현했다.
- 콘솔 창의 출력 관리 및 부드러운 화면 전환을 담당하는 객체
- Singleton 패턴을 사용하여 프로그램 전역에서 출력 관리를 쉽게 수행
- 더블 버퍼링 기법을 통해 끊김 없는 화면 출력과 최적화된 성능 제공
- 미로 맵(2차원 배열)을 관리하는 객체
- 랜덤 맵 생성 기능 제공 (사용자가 커스텀 맵이 없을 경우)
- BFS 알고리즘을 사용하여 적과 출구까지의 경로가 존재하는지 확인 후, 유효한 맵으로 확정
- 플레이어가 방향을 전환할 때, ****맵(2차원 배열) 회전 기능 제공
- 플레이어의 현재 위치와 방향을 기반으로, 전방에 있는 벽과 통로를 3D처럼 표현
- 간단한 선을 사용해 좌우 상황을 묘사하여, 플레이어가 주변 환경을 쉽게 파악할 수 있도록 지원
- 현상 : 콘솔을 지운 후 다시 출력할 때, 화면이 지워지고 문자열이 출력되는 동안 콘솔이 깜빡거리며 출력이 버벅거리는 문제가 발생
- 해결 방법 : 더블 버퍼링 기법을 도입하여 콘솔 버퍼를 2개 준비하여 출력할 문자열을 백 버퍼에 저장한 후, 화면을 갱신할 때 프론트 버퍼와 교체하는 방식으로 진행
- 결과 :
system(cls)를 사용해 콘솔을 지울 때 발생하던 깜빡임 현상이 해결되었으며,cout을 사용할 때 빈번한 I/O 시스템 호출로 인한 성능 저하도 개선 또한 실시간으로 움직이는 것처럼 자연스러운 화면 전환이 가능해짐
- 현상 : 랜덤으로 생성된 맵에서 플레이어가 구조물에 둘러싸여 출구까지 갈 수 없는 상황이 발생
- 해결 방법 : BFS 알고리즘을 사용하여 랜덤으로 생성된 맵에서 출구까지 경로가 있는지 확인하고 경로가 없을 경우 맵을 다시 생성
- 결과 : 제작자가 직접 맵을 만들지 않더라도 다양한 랜덤 맵을 생성할 수 있게 되어 더 다양한 스테이지가 가능해짐
- 맵 생성 → 맵 점검 → 재생성 순환이 반복되다보니 생각보다 시간이 오래걸렸다. 때문에 경로가 없는 맵의 경우, 단순히 맵을 다시 생성하는 대신 문제가 있는 부분에 새로운 길을 하나 추가하여 경로를 만들도록 수정하는 방법으로 하면 더 효율적일 것 같다.
- system(cls) → 더블 버퍼링으로 출력 관리를 했을 때 생각 이상으로 더 빨라졌다. 이는 I/O 시스템 호출이 생각 보다 많은 자원을 쓴다고 보이기 때문에 앞으로 더 주의해야 겠다…