[C] #1 미로찾기 게임
미로 생성
- 미로의 틀 생성
미로의 크기를 19 x 19로 생성할 것이다.
#define SIZE 19
define은 매크로를 정의하는 구문이다. 위와 같은 경우를 보통 단순 매크로라고 부르면 기본적인 틀은 다음과 같다.
#define 매크로이름 값
- 미로 선언
char maze[SIZE][SIZE];
19 x 19의 2차원 배열의 미로가 생성될 것이다.
- 미로 내부 구성
미로를 구성하기에 앞서, txt 파일을 통해 난이도 선택을 할 수 있도록 하려고 한다.
즉, 파일을 읽어오는 방식이다.
txt 파일을 c 프로젝트와 같은 위치에 둔다.
- 난이도 변수를 받는 LoadMaze
void LoadMaze(char num)
{
char path[20] = "./Maze";
strcat(path, &num);
strcat(path, ".txt");
char str_tmp[50] = { 0, };
FILE* f = fopen(path, "r");
}
--> 상대경로로 작성한 모습이다. 상대경로를 사용할 경우, 개개인마다 경로를 변경할 필요가 없이 파일 위치만 잘 조정해주면 된다.
기본적인 상대경로를 설정하고, strcat 함수를 이용해 난이도 변수, 확장자를 합쳐준다.
파일을 읽을 때는 <stdio.h> 헤더파일에 정의되어 있는 fopen 함수로 파일을 열고, 파일 포인터를 리턴받는다.
- 미로 저장
파일의 내용을 미로에 저장해야 하는데, 함수 2개만 짚고 넘어가겠다.
1. fgets 함수
fgets(char *s, int size, FILE *stream)
gets_s 함수와 비슷하다. 최대 크기가 size 이하인 문자를 stream으로부터 읽어서 s에 저장한다.
중간에 EOF 혹은 개행문자를 만나면 읽기를 멈추는 함수이다.
2. strtok 함수
char *strtok(char *string, char const *delimiter)
문자열 string을 delimiter를 기준으로 잘라서 반환한다.
string에 NULL을 넣고 실행하면, 이전에 자르고 남은 문자열을 다시 delimiter로 잘라서 반환해준다.
--> 이 함수들을 포함한 함수들은 다음과 같다.
void LoadMaze(char num)
{
//....
for (int i = 0; i < SIZE; i++)
{
fgets(str_tmp, 50, f);
char* ptr = strtok(str_tmp, "\t");
for (int j = 0; j < SIZE; j++)
{
maze[i][j] = *ptr;
ptr = strtok(NULL, "\t");
}
}
}
첫 번째 반복문의 내부에서 fgets로 한 줄의 데이터를 가져온다.
그 후, strtok 함수를 이용해 탭으로 문자열을 분리한 뒤, 미로에 저장하는 구조이다.