If you're seeing this message, it means we're having trouble loading external resources on our website.

웹 필터가 올바르게 작동하지 않으면 도메인 *. kastatic.org*.kasandbox.org이 차단되어 있는지 확인하세요.

주요 내용

메모리 게임: 점수 내기

메모리 게임이 거의 완성되었습니다! 단 한 가지, 점수 부분이 빠져 있습니다. 그 부분의 게임 규칙을 다시 봅시다:
게임의 목적은 최소의 시도로 모든 타일의 이미지가 윗면이 되도록 하는 것입니다. (결국 일치하는 모든 이미지 쌍을 찾는 것입니다) 즉, 시도 횟수가 적을수록 더 높은 점수를 받습니다.
어떻게 시도 횟수를 기록할까요? 한번 "시도" 한다는 것은 여러분이 두 개의 타일을 뒤집는 모든 경우를 뜻합니다. 이것은 flippedTiles.length === 2조건을 확인하는 if 블록에 대응하는 부분입니다. 조건문 내에서 증가시키는 새로운 전역 변수 numTries를 추가합니다.
if (flippedTiles.length === 2) {
  numTries++;
  ...
}
게임이 끝나면, 곧 플레이어가 모든 타일을 일치시켰을 때, 점수를 표시하려고 합니다. 그건 어떻게 할까요? 두 가지 방법을 생각해 볼 수 있습니다:
  1. tiles 배열을 반복해 모든 isMatchtrue인지 확인합니다.
  2. 전역 변수를 사용해 플레이어가 몇 쌍을 찾았는지 기록하고, 이것을 게임에서 일치하는 쌍의 총 개수와 비교합니다.
전에 비슷한 경우에서도 매번 배열 전체를 반복하지 않는 방법을 선택했으니 이번에도 두 번째 방법을 선택합니다.
먼저 게임 상태를 나타내는 다른 전역 변수들을 초기화 한 곳에서 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_ROWSNUM_COLS를 작은 수로 바꾸면, 훨씬 빠르게 게임을 끝낼 수 있습니다. 밑에서 시도해 보세요!