더북(TheBook)

rand()함수를 사용할 수 있도록 time.h와 stdlib.h 파일을 추가하고, main()함수에서 난수 초기화를 합니다.

19가 나왔다고 해 봅시다. 카드 지도에 접근하려면 19라는 번호 대신 arrayAnimal 배열의 인덱스 [3] [4]로 바꿔야 합니다. 카드 번호는 conv_pos_x()함수와 conv_pos_y()함수를 호출해 인덱스로 변환합니다. 각 함수를 호출할 때는 카드 번호(19)를 저장한 randPos 변수를 넘깁니다. 그리고 두 함수에서 반환받은 값(3, 4)을 각각 변수 xy에 저장합니다.

카드 번호를 변환한 인덱스를 얻었다면 arrayAnimal 배열에서 해당 요소가 비었는지 확인합니다. 앞에서 arrayAnimal 배열의 값을 모두 -1로 초기화했습니다. 따라서 arrayAnimal[x] [y]의 값이 -1이면 빈 공간이므로 현재 위치를 나타내는 randPos를 반환합니다. 해당 요소가 비어 있지 않으면 반복문 처음으로 돌아가 다시 빈 공간을 찾습니다. 시작할 때는 모두 빈 상태지만, 반복할수록 빈 공간이 줄어듭니다. 결국 모든 위치를 한 번씩 반환하고, 위치를 총 20개 반환하면 더 이상 빈 공간이 없기 때문에 무한 반복문은 끝납니다. 빈 공간이 없을 때는 return 문으로 0을 반환하는데, randPos 때문에 이 함수의 반환형은 int형이라서 넣는 문장이지 큰 의미는 없습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.