so_long

hhkim·2022년 1월 6일
0

42cursus

목록 보기
6/20
post-thumbnail

출발점에서 시작해서 아이템을 먹고 도착점까지 가는 게임 만들기

  • 움직일 때마다 움직인 횟수가 쉘에 기록되어야 함
  • W A S D로 캐릭터 이동
    ESC 누르면 창이 닫히고 프로그램 종료
    윈도우의 빨간 창닫기 버튼 누르면 창이 닫히고 프로그램 종료
  • 인자로 .ber 확장자의 맵을 받는 프로그램

  • 벽, 아이템, 빈 공간으로 이루어짐
    0: 빈 공간
    1: 벽
    C: 아이템
    E: 도착점
    P: 출발점
  • 맵은 벽으로 둘러싸여야 하며, 닫혀 있어야 함
  • 적어도 하나의 출구, 아이템, 시작점이 있어야 함
  • 유효한 통로가 있는지 검사할 필요는 없음
  • 맵은 직사각형이어야 함
  • 위의 조건을 충족하지 못하는 경우 프로그램이 종료되고 Error\n와 함께 적절한 에러 메세지 출력
예)
1111111111111
10010000000C1
1000011111001
1P0011E000001
1111111111111

1111111111111111111111111111111111
1E0000000000000C00000C000000000001
1010010100100000101001000000010101
1010010010101010001001000000010101
1P0000000C00C0000000000000000000C1
1111111111111111111111111111111111

사용 가능 함수

open close read write
printf malloc free perror
strerror exit
++ minilibx 함수들


mandatory

minilibx_mms_20210621 사용
1. .ber 파일을 인자로 받아서 읽기 (gnl)
2. 이어붙이기 (join)
3. 맵을 이중 포인터 or 이차원 배열에 담기 (split)
4. 유효성 검사
5. 각 칸에 들어갈 이미지 크기 * 칸 개수 크기의 윈도우, 이미지 생성
6. 맵 루프 돌면서 이미지 데이터 쓰기

맵 유효성 검사

  1. 확장자가 .ber인지
  2. 각 줄의 길이가 같은지 (직사각형인지)
  3. 1로 둘러싸여 있는지
  4. 최소한 하나의 P(1개 제한), E, C가 있는지

맵 렌더링

  • 맵 배열 루프 돌면서 윈도우 크기의 이미지에 픽셀 저장
    • 먼저 배경 이미지로 전체 이미지 덮기
    • 맵 요소 그리면서 투명한 배경일 때 (0xff000000) 제외하고 그리기
  • 키 훅 등록
    • W A S D: 캐릭터 이동, 무브 수 출력
    • ESC: 종료
  • 닫기 버튼 훅 등록

조작

  1. W A S D 키 누르면 캐릭터가 움직이도록 새로 렌더링
  • 캐릭터 현재 위치를 따로 저장해둠 (포인터)
    벽(1)이 아니면 이동하도록 (배열 수정하고 맵 다시 그리기)
    아이템(C)이면 아이템 삭제
    도착점(E)이면 아이템을 다 모았으면 성공, 아니면 아무것도 안 함
  1. 캐릭터 움직일 때마다 무브 수 출력

bonus

스프라이트 애니메이션

임의의 변수를 만들고 이동하는 키를 누를 때마다 반전시켜서 이미지 교체

무브 수 표시

mlx_string_put 활용


🔗

PNG 컨버터
XPM 컨버터
이모지 이미지

0개의 댓글