코드를 작성해 봅시다.
➊ main()함수 위에 shuffleAnimal()함수를 선언합니다. 동물 이름을 카드 지도에 무작위로 배치하는 작업만 하므로 이 함수도 전달값과 반환값은 필요 없습니다.
➋ main()함수 아래에 shuffleAnimal()함수를 정의합니다. shuffleAnimal()함수는 안쪽 for 문에서 동물 이름을 배치하는 작업을 2번 반복합니다. 그리고 바깥쪽 for 문에서 이를 10번 반복합니다.
➌ 안쪽 for 문에서는 카드 지도에서 빈 공간을 찾아야 하는데, 이 부분도 getEmptyPosition이라는 이름의 함수를 사용해 처리합니다. 함수 정의는 뒤에서 설명하고 여기서는 getEmptyPosition()함수를 호출하는 부분만 작성합니다. 이 함수는 카드 지도에서 빈 공간을 찾아 해당 위치를 반환합니다. 이 값을 받아 동물 이름을 배치하므로 pos라는 변수를 선언해 저장합니다. 반환값은 0~19의 카드 번호이므로 int형으로 선언합니다.
➍ pos 변수의 값, 즉 getEmptyPosition()함수가 반환한 카드 번호를 카드 지도의 인덱스로 바꿔야 합니다. 이 부분도 함수를 만들어 처리합니다. 2차원 배열의 인덱스는 x, y 좌표로 생각할 수 있습니다. x 좌표는 conv_pos_x라는 함수를, y 좌표는 conv_pos_y라는 함수를 사용해 바꿉니다. 두 함수가 어떻게 작동하는지도 뒤에서 정의합니다. 각 함수는 카드 번호를 인덱스로 변환하므로 호출할 때 pos 변수를 전달합니다.
➎ 바깥쪽 for 문은 동물 이름 수만큼 반복하므로 변수 i는 strAnimal 배열의 인덱스와 같습니다. 따라서 x, y 좌표를 구하고 나면 카드 지도의 arrayAnimal[x] [y]에 동물 번호인 i를 저장합니다.