주요 내용
코스: 컴퓨터 프로그래밍 > 단원 4
단원 5: 메모리 게임 만들기메모리 게임: 점수 내기
메모리 게임이 거의 완성되었습니다! 단 한 가지, 점수 부분이 빠져 있습니다. 그 부분의 게임 규칙을 다시 봅시다:
게임의 목적은 최소의 시도로 모든 타일의 이미지가 윗면이 되도록 하는 것입니다. (결국 일치하는 모든 이미지 쌍을 찾는 것입니다) 즉, 시도 횟수가 적을수록 더 높은 점수를 받습니다.
어떻게 시도 횟수를 기록할까요? 한번 "시도" 한다는 것은 여러분이 두 개의 타일을 뒤집는 모든 경우를 뜻합니다. 이것은
flippedTiles.length === 2
조건을 확인하는 if 블록에 대응하는 부분입니다. 조건문 내에서 증가시키는 새로운 전역 변수 numTries
를 추가합니다.if (flippedTiles.length === 2) {
numTries++;
...
}
게임이 끝나면, 곧 플레이어가 모든 타일을 일치시켰을 때, 점수를 표시하려고 합니다. 그건 어떻게 할까요? 두 가지 방법을 생각해 볼 수 있습니다:
- tiles 배열을 반복해 모든
isMatch
가true
인지 확인합니다. - 전역 변수를 사용해 플레이어가 몇 쌍을 찾았는지 기록하고, 이것을 게임에서 일치하는 쌍의 총 개수와 비교합니다.
전에 비슷한 경우에서도 매번 배열 전체를 반복하지 않는 방법을 선택했으니 이번에도 두 번째 방법을 선택합니다.
먼저 게임 상태를 나타내는 다른 전역 변수들을 초기화 한 곳에서
numMatches
도 0으로 초기화합니다: var numMatches = 0;
일치한 타일의
if
블록 안에 numMatches
변수를 증가시킵니다:if (flippedTiles[0].face === flippedTiles[1].face) {
flippedTiles[0].isMatch = true;
flippedTiles[1].isMatch = true;
flippedTiles.length = 0;
numMatches++;
}
draw
함수의 마지막에 플레이어가 찾을 수 있는 모든 쌍을 찾았는지 확인하고 축하 메시지를 출력합니다:if (numMatches === tiles.length/2) {
fill(0, 0, 0);
text("You found them all in " + numTries + " tries",
20, 360);
}
밑에서 직접 시도해 보세요. 실제로 이기는 데까지 좀 걸릴 수도 있을 겁니다.
게임에서 이루기 쉽지 않은 부분을 테스트할 때는 게임을 잠깐 동안 쉽게 바꾸어 보세요. 예를 들어, 이 게임의 경우
NUM_ROWS
와 NUM_COLS
를 작은 수로 바꾸면, 훨씬 빠르게 게임을 끝낼 수 있습니다. 밑에서 시도해 보세요!