so_long은 간단한 2D 게임을 구현하는 프로젝트로, MiniLibX 라이브러리를 사용하여 캐릭터와 아이템을 화면에 렌더링하고, 캐릭터가 맵을 탐색하도록 설계되었습니다.
이 프로젝트는 간단한 미로 게임을 구현하여, MiniLibX 라이브러리를 사용한 그래픽 프로그래밍과 C 언어로 게임 로직을 설계하는 경험을 제공합니다. 플레이어는 제한된 공간에서 아이템을 수집하고 출구로 탈출해야 하며, 게임의 승패가 결정됩니다.
- 플레이어의 목표는 맵에 있는 모든 아이템을 수집하고, 출구를 통해 탈출하는 것입니다.
- 플레이어는 W, A, S, D 키를 사용하여 상하좌우로 이동할 수 있습니다.
- 모든 아이템을 수집하기 전에는 출구가 닫혀 있으며, 아이템을 모두 모은 후에만 출구를 통과할 수 있습니다.
- 벽에는 충돌할 수 없으며, 캐릭터는 벽을 통과할 수 없습니다.
이 프로젝트에서는 DFS(깊이 우선 탐색) 알고리즘을 사용하여 맵의 유효성을 검사하고, 플레이어가 모든 아이템과 출구에 도달할 수 있는지 확인합니다.
DFS는 다음과 같은 이유로 so_long 프로젝트에 적합합니다:
- 경로 탐색: DFS는 복잡한 맵에서도 빠르게 경로를 탐색할 수 있어, 플레이어가 목적지에 도달할 수 있는지 확인하는 데 적합합니다.
- 메모리 효율성: 재귀적 접근 방식을 사용해 메모리를 절약하고, 맵의 모든 경로를 효율적으로 탐색할 수 있습니다.
- 유효성 검사: 맵에서 벽, 출구, 아이템이 모두 연결된 상태인지 확인하여, 게임 플레이에 적합한 맵인지 판단하는 데 유용합니다.
- 맵 파싱: 맵은
.ber확장자를 가진 파일로 제공되며, 게임 로직을 위해 파일을 읽고 파싱해야 합니다. 맵 파일은 벽, 빈 공간, 플레이어의 시작 위치, 아이템, 출구 등의 요소를 포함합니다. - 그래픽 렌더링:
MiniLibX라이브러리를 사용하여 그래픽 요소를 화면에 렌더링합니다. 각 요소는 이미지로 표현되며, 맵 파일의 구조에 따라 화면에 배치됩니다. - 이벤트 처리: 키보드 입력을 통해 플레이어가 상하좌우로 이동할 수 있도록 이벤트를 처리합니다.
- 게임 상태 업데이트: 아이템을 수집하거나 출구를 통과할 때 게임 상태를 업데이트하여 승리 조건을 확인합니다.
- 에러 처리: 잘못된 맵 파일 형식, 올바르지 않은 경로 등 다양한 에러 상황에 대해 예외 처리를 합니다.
-
터미널에서 이 저장소를 클론합니다.
git clone https://github.com/jmsmg/so_long.git cd so_long -
프로젝트를 빌드합니다.
make
-
컴파일이 완료되면, 실행 가능한 파일이 생성됩니다.
so_long을 실행하려면, 맵 파일을 인수로 제공하여 실행할 수 있습니다.
./so_long maps/map.ber- W: 위로 이동
- A: 왼쪽으로 이동
- S: 아래로 이동
- D: 오른쪽으로 이동
- ESC: 게임 종료