더북(TheBook)

7.4.6 레벨 올리고 게임 종료하기

어항에 물을 주고 나면 레벨을 올릴지 확인해야 합니다. 레벨업은 20초마다 한 번씩 수행한다고 했으므로 1레벨은 처음 20초 동안, 2레벨은 그다음 20초(총 경과 시간 기준으로는 40초) 동안 유지됩니다. 20초 동안 물고기가 한 마리라도 살아 있으면 레벨을 올려 줍니다. 레벨이 올라가면 물은 점점 더 빨리 증발할 겁니다.

이 부분은 조건문으로 작성합니다. 조건은 총 경과 시간인 totalElapsedTime을 사용해 비교합니다. totalElapsedTime의 값을 20초로 나눴을 때 몫은 현재 레벨(level)과 같습니다. 이 값이 현재 레벨(level)에서 1을 뺀 값보다 크면 레벨을 올리고, 크지 않으면 레벨을 유지합니다. 예를 들어, 1레벨에서 15초가 흘렀을 때 15초 나누기 20을 하면 몫은 0입니다. 현재 레벨 1에서 1을 뺀 값(0)보다 크지 않으므로 레벨을 유지합니다. 또한, 1레벨에서 총 경과 시간이 25초가 됐을 때 25 나누기 20을 하면 몫은 1입니다. 이 값은 1(level) - 1 = 0보다 크므로 레벨을 올립니다.

레벨업을 level++로 처리합니다.

기존 레벨에서 새로운 레벨로 레벨이 올랐다는 메시지를 출력합니다. 이때 level 변수의 값은 새로운 레벨이므로 기존 레벨을 출력할 때는 level - 1을 해야 합니다.

이 게임의 최고 레벨은 5입니다. 계속 레벨업을 하다가 5레벨이 되면 게임을 끝내야 합니다. 따라서 level 값이 5가 되면 게임 종료 메시지를 출력하고 게임을 종료합니다. 프로그램을 완전히 끝내야 하므로 exit(0)으로 종료합니다. break 문에서 배웠듯이 exit(0)은 그 뒤에 어떤 문장이 오든 상관없이 바로 프로그램을 종료합니다. exit()함수는 stdlib.h 파일에 포함되어 있으므로 stdlib.h 파일을 추가합니다.

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