Summary
이 프로젝트는 매우 작은 2D 게임입니다. 이 프로젝트는 당신이 텍스처, 스프라이트, 그리고 기본적인 게임플레이 요소들을 다루게 하기 위해 만들어졌습니다.
Goals
이 프로젝트의 목표는 첫 해의 모든 목표들과 유사합니다 : 엄격함, C의 사용, 기본 알고리즘의 사용, 정보 연구 등
그래픽 디자인 프로젝트인 So long은 창, 색상, 이벤트, 텍스처 등과 같은 영역에서 여러분의 기술을 향상시켜줄 것입니다.
Mandatory part - so long
프로그램 이름 | so_long |
---|---|
제출할 파일 | 모든 파일 |
인자 | *.ber 형태의 맵 |
외부 함수 | open, close, read, write, printf, malloc, free, perror, strerror, exit, Minilibx의 모든 함수 |
Libft 허용 여부 | 허용 |
설명 | 돌고래가 물고기를 몇 마리 먹고 지구를 탈출하는 작은 2D 게임을 생성하거나 어떤 히어로가 보물을 모아서 공간을 떠나는 게임을 만들어야 한다. |
제한사항은 다음과 같다.
- miniLibX를 사용해야한다. OS에서 사용가능한 버전을 사용하거나 제공되는 소스를 사용한다. 소스를 사용하기로 하였다면 Common Instruction과 동일한 규칙을 Libft에 적용해야한다.
- 창 관리는 부드러워야 한다 : 창 변경하기, 축소하기, 등
- 예시는 돌고래로 주어지지만 원하는 어떤 것으로도 사용할 수 있다.
- 맵은 벽, 수집품, 자유 공간의 3가지 요소로 구성될 것이다.
- 플레이어의 목표는 맵에 있는 수집품을 모두 모은 다음 최소한의 움직임으로 탈출하는 것이다.
- 매번 이동할 때마다 현재 이동하는 횟수가 셸에 표시되어야 합니다.
- 플레이어는 위, 아래, 왼쪽, 오른쪽으로 움직일 수 있어야 합니다.
- 2D 뷰(top-down또는 profile)를 사용합니다.
- 게임은 실시간일 필요는 없습니다.
- 플레이어는 벽으로 이동할 수 없습니다.
- 이 프로그램은 창에 이미지를 표시하고 다음 규칙을 준수합니다.
- W, A, S, D 키는 주인공을 이동시키는 데 사용될 것입니다.
- ESC를 누르면 윈도우를 닫고 프로그램을 완전히 종료해야 합니다.
- 창 프레임에 있는 빨간색 십자가를 클릭하면 창을 닫고 프로그램을 완전히 종료해야 합니다.
- MinilibX의 images를 사용하는 것을 추천합니다.
- 프로그램은 확장자가 .ber인 맵 설명 파일을 첫 번째 인수로 받아야 합니다.
맵은 5개의 문자로만 구성되어야 합니다: 빈 공간은 0, 벽은 1, 수집품은 C, 맵 출구는 E, 플레이어의 시작 위치는 P. 다음은 간단한 유효한 맵의 예시입니다.
1 2 3 4 5
1111111111111 10010000000C1 1000011111001 1P0011E000001 1111111111111
- 맵은 벽으로 둘러싸야 하며, 그렇지 않은 경우 프로그램은 에러를 반환해야 합니다.
- 맵에는 적어도 하나의 출구, 하나의 수집품 및 하나의 시작 위치가 있어야 합니다.
- 당신은 맵에 유효한 경로가 있는지 확인할 필요가 없습니다.
- 맵은 직사각형이어야 합니다.
- 맵의 규칙을 준수하는 모든 종류의 맵을 파싱할 수 있어야 합니다.
- 다른 간단한 .ber 맵의 예시이다.
1 2 3 4 5 6
1111111111111111111111111111111111 1E0000000000000C00000C000000000001 1010010100100000101001000000010101 1010010010101010001001000000010101 1P0000000C00C0000000000000000000C1 1111111111111111111111111111111111
- 파일에서 잘못된 구성이 발견되면 프로그램을 올바르게 종료하고
"Error\n"
을 반환한 다음 사용자가 임의로 설명한 명시적인 에러 메시지를 표시해야 합니다.
Bonus part
평가에서 정당화될 수 있다면 다른 함수를 사용하는 것이 허용됩니다.
보너스 리스트 :
- 만날 시 플레이어가 패배하도록 만드는 적의 순찰
- 몇가지의 스프라이트 애니메이션
- 셸 출력 대신 화면에 이동 횟수가 직접 표시