so_long은 2D 그래픽 게임을 구현하는 과제이다.
mlx(minilibx)는 그래픽 관련 지식이 없어도 손쉽게 그래픽 소프트웨어를 만들 수 있게 구현된 라이브러리이다. 윈도우 및 이미지를 관리할 수 있다.
mlx = mlx_init()
win = mlx_new_window(mlx, width, height, "window_name");
mlx_loop(mlx);
mlx_destroy_window(mlx, win);
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좌표);
마우스나 키보드 작동 등의 이벤트를 통해 윈도우를 제어하는 것을 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을 통해서 게임 통과 조건을 만든다.