NO ./textures/NO.xpm
SO ./textures/SO.xpm
WE ./textures/WE.xpm
EA ./textures/EA.xpm
F 127, 127, 127
C 135, 206, 235
111111111111111111111111
1000000000110000000000001
1011000001110000001000001
100100000000000000000001
111111111011000001110000000000001
100000000011000001110111101111111
11110111111111011100000010001
11110111111111011101010010001
11000000110101011100000010001
10001000000000001100000010001
10000000000000001101010010001
11000001110101011111011110N0111
11110111 1110101 101111010001
11111111 1111111 111111111111
Texture
NO
, SO
, WE
, EA
로 시작하는 총 4개의 .xpm파일경로만 명시되어 있어야 한다.Color
F
(floor), C
(ceiling)로 시작하는 두 가지의 색 정보만 주어져야 한다.,
로 구분되어 제공된다.,
는 2개만 존재해야 하며, 정수와 정수 사이에 공백의 유무와 개수는 상관없다.F
또는 C
와 색 정보는 공백으로 구분된다.Map
0
: 빈 공간1
: 벽공백
: 존재하지 않는 공간N, S, W or E
: 플레이어의 초기 위치 및 시점플레이어의 위치
기준 동서남북엔 0
또는 1
만 올 수 있다.공백
기준 동서남북엔 공백
또는 1
만 올 수 있다.공백
은 오직 1
하고만 맞닿을 수 있다../cub3D map.cub
.cub
확장자여야 한다..cub
파일 open()
하고 gnl로 한 줄씩 받아오면서 Texture(NO
, SO
, EA
, WE
), Color(F
, C
), Map 정보를 차례대로 받아온다. NO ./path_to_the_north_texture
형식이 맞으면 ft_split()
으로 path만 가져와서 해당 파일 open()
하고 mlx_xpm_file_to_image()
와 mlx_get_data_addr()
를 통해 texture 배열에 저장한다. (SO
, EA
, WE
도 마찬가지) 총 4개의 texture 정보(동서남북)를 받아야한다.T << 24 | R << 16 | G << 8 | B
) 0xTTRRGGBB
형식으로 변환하여 저장한다. 총 2개의 color 정보(천장, 바닥)을 받아야한다.1
)으로 둘러 쌓여있는지0
, 1
, 공백
, pos
(플레이어의 초기 위치 및 시선)로만 이루어져 있는지pos
정보는 하나만 있는지
0
과 공백
, pos
와 공백
은 맞닿을 수 없다.pos
정보(N, S, W or E)에 따라 player의 초기 위치 벡터, 방향 벡터, 카메라 평면 초기화
mlx_hook(info.win, KEY_EVENT_PRESS, 0, &key_press, &info);
ESC
key 입력 들어오면 메모리 해제 후 프로그램 종료W
, A
, S
, D
key 입력 들어오면 key flag
1로 설정mlx_hook(info.win, KEY_EVENT_RELEASE, 0, &key_release, &info);
ESC
key 입력 들어오면 메모리 해제 후 프로그램 종료W
, A
, S
, D
key 입력 끊기면 key flag
0으로 설정mlx_hook(info.win, KEY_EVENT_EXIT, 0, &exit_press, &info);
x
버튼 누르면 메모리 해제 후 프로그램 종료mlx_loop_hook(info.mlx, &main_loop, &info);
mlx_put_image_to_window()
함수로 창에 띄운다.실행 시 초기 화면