Skip to content

yugd1211/MazeGame_ConsoleProject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 

Repository files navigation

MazeGame

기간

  • 2024.9.27 ~ 2024.10.3 (7일)

플랫폼

  • Windows

언어

  • C++

IDE

  • Visual Studio 2022

플레이 영상

https://youtu.be/2evicefxdeg

프로젝트 소개

이 프로젝트는 방향키 또는 WASD 키를 사용해 플레이어를 움직이며 탈출구를 찾아 나가는 미로 찾기 게임이다. 콘솔 프로젝트의 특성상 텍스트 기반으로 동작하게 되지만, 텍스트 만으로는 피로감이 누적될 수 있어, 더 직관적이고 간단하게 즐길 수 있는 미로 찾기 게임을 구현했다.

주요 기능

1. BufferManager

  • 콘솔 창의 출력 관리부드러운 화면 전환을 담당하는 객체
  • Singleton 패턴을 사용하여 프로그램 전역에서 출력 관리를 쉽게 수행
  • 더블 버퍼링 기법을 통해 끊김 없는 화면 출력과 최적화된 성능 제공

2. Map

  • 미로 맵(2차원 배열)을 관리하는 객체
  • 랜덤 맵 생성 기능 제공 (사용자가 커스텀 맵이 없을 경우)
  • BFS 알고리즘을 사용하여 적과 출구까지의 경로가 존재하는지 확인 후, 유효한 맵으로 확정
  • 플레이어가 방향을 전환할 때, ****맵(2차원 배열) 회전 기능 제공
Map PNG

3. MapViewer

  • 플레이어의 현재 위치와 방향을 기반으로, 전방에 있는 벽과 통로를 3D처럼 표현
  • 간단한 선을 사용해 좌우 상황을 묘사하여, 플레이어가 주변 환경을 쉽게 파악할 수 있도록 지원
MapViewer PNG

문제 정의 및 해결

1. 문제 : system(cls) 호출 시 콘솔 화면이 깜빡이고 출력이 버벅거리는 문제 발생

  • 현상 : 콘솔을 지운 후 다시 출력할 때, 화면이 지워지고 문자열이 출력되는 동안 콘솔이 깜빡거리며 출력이 버벅거리는 문제가 발생
  • 해결 방법 : 더블 버퍼링 기법을 도입하여 콘솔 버퍼를 2개 준비하여 출력할 문자열을 백 버퍼에 저장한 후, 화면을 갱신할 때 프론트 버퍼와 교체하는 방식으로 진행
  • 결과 : system(cls)를 사용해 콘솔을 지울 때 발생하던 깜빡임 현상이 해결되었으며, cout을 사용할 때 빈번한 I/O 시스템 호출로 인한 성능 저하도 개선 또한 실시간으로 움직이는 것처럼 자연스러운 화면 전환이 가능해짐

2. 문제 : 랜덤 맵 생성 시 플레이어가 출구에 도달하지 못하는 문제 발생

  • 현상 : 랜덤으로 생성된 맵에서 플레이어가 구조물에 둘러싸여 출구까지 갈 수 없는 상황이 발생
  • 해결 방법 : BFS 알고리즘을 사용하여 랜덤으로 생성된 맵에서 출구까지 경로가 있는지 확인하고 경로가 없을 경우 맵을 다시 생성
  • 결과 : 제작자가 직접 맵을 만들지 않더라도 다양한 랜덤 맵을 생성할 수 있게 되어 더 다양한 스테이지가 가능해짐

회고

  1. 맵 생성 → 맵 점검 → 재생성 순환이 반복되다보니 생각보다 시간이 오래걸렸다. 때문에 경로가 없는 맵의 경우, 단순히 맵을 다시 생성하는 대신 문제가 있는 부분에 새로운 길을 하나 추가하여 경로를 만들도록 수정하는 방법으로 하면 더 효율적일 것 같다.
  2. system(cls) → 더블 버퍼링으로 출력 관리를 했을 때 생각 이상으로 더 빨라졌다. 이는 I/O 시스템 호출이 생각 보다 많은 자원을 쓴다고 보이기 때문에 앞으로 더 주의해야 겠다…

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages