[42seoul] so_long

ppparkta·2023년 1월 30일
1

42Seoul

목록 보기
4/7

so_long

so_long은 2D 그래픽 게임을 구현하는 과제이다.

mlx

mlx(minilibx)는 그래픽 관련 지식이 없어도 손쉽게 그래픽 소프트웨어를 만들 수 있게 구현된 라이브러리이다. 윈도우 및 이미지를 관리할 수 있다.

윈도우 관리

mlx 초기화

mlx = mlx_init()

윈도우 창 만들기

win = mlx_new_window(mlx, width, height, "window_name");

윈도우 실행

mlx_loop(mlx); 

윈도우 삭제

mlx_destroy_window(mlx, win);

이미지 관리

xpm

X11 Pixmap Graphic이다.

X window system에서 사용하는 bit map image로, ASCII text로 단색 이미지를 나타낸다. mlx에서 이미지를 가져오기 위해 xmp로 확장자를 변경해야 한다. (xpm 변환기)

이미지 초기화

image = mlx_xpm_file_to_image(mlx, "./images/w.xpm", &img_w, &img_h);

이미지 윈도우에 할당

mlx_put_image_to_window(mlx, win, image, x좌표, y좌표);

key hook

마우스나 키보드 작동 등의 이벤트를 통해 윈도우를 제어하는 것을 hook이라고 한다. mlx에서 관련 내장함수를 지원한다.

mlx_hook(win, X_EVENT, key_mask, key_hook, mlx객체);

맥os의 경우 key_mask값을 0으로 놔도 문제되지 않는다. X_EVENT는 mlx파일 내부에 X.h를 확인하면 알 수 있다.

key_hook은 사용자 지정 함수이다. mlx가 권장하는 함수 형태는 int key_hook(int keycode, void *mlx) 이다.

keycode에는 몇번 키보드인지 정보가 담긴다.

다만 확인 결과 첫번째 자리에 keycode를 받으면 뒤에 어떤 인자가 와도 상관없었다. 나는 위와 같은 형태로 작성했다. 함수의 내용과 상관없이 반환값은 항상 0을 받는다.

맵 읽기

ber확장자 파일을 인자로 받아서 맵을 열어야 한다. open, get_next_line 함수를 사용했다.

  • 맵을 열면 맵의 가로, 세로 길이를 저장한다.
  • 맵이 직사각형인지 확인한다.
  • 필요한 오브젝트가 있는지 확인한다.
  • 탈출경로가 존재하는지 확인한다.

게임 조건 걸기

맵을 읽었다면 key hook을 통해서 게임 통과 조건을 만든다.

profile
겉촉속촉

0개의 댓글