더북(TheBook)

1.7.5 실습 문제 2: 카드 게임 시뮬레이션

이번 실습 문제에서는 주어진 상황을 분석하고 최적의 성능을 내기 위해 가장 적합한 자료 구조를 찾는 연습을 해보겠습니다.

카드 게임을 시뮬레이션하려고 합니다. 한 게임에 네 명의 플레이어가 있고, 각각 임의의 카드 13장을 가지고 게임을 시작합니다. 그리고 각 플레이어의 카드에서 임의의 카드 한 장을 선택합니다. 그렇게 하면 비교할 카드가 네 장 생기게 되고, 이 중 서로 중복되는 카드 쌍은 제거합니다. 세 장의 카드가 같을 경우에는 이 중 임의로 두 장만 제거합니다. 네 장의 카드가 모두 같으면 네 장을 모두 제거합니다. 남겨진 카드는 카드를 낸 플레이어가 다시 가져갑니다. 일치하는 카드 쌍이 없으면 플레이어의 카드 세트를 섞을 수 있습니다.

이제 이 과정을 어느 한 사람의 카드가 다 없어질 때까지 반복합니다. 제일 먼저 자신의 카드를 모두 없앤 사람이 게임의 승자입니다. 최종적으로 승자를 화면에 출력하고 게임이 끝납니다.

이 문제를 해결하기 위해 다음 단계를 수행합니다.

  1. 먼저 각 플레이어가 가지고 있는 카드를 저장하기에 적합한 컨테이너를 결정해야 합니다. 네 명의 플레이어가 각기 여러 장의 카드를 가지고 있으므로 네 개의 컨테이너 객체를 생성해야 합니다.

  2. 카드를 초기화하고 섞는 함수를 작성합니다.

  3. 네 명의 플레이어에서 각각 무작위로 카드를 선택하는 함수를 작성합니다.

  4. 서로 일치하는 카드가 있는지 검사하는 매칭 함수를 작성합니다. 이 함수는 각 플레이어로부터 카드를 한 장씩 선택하고, 선택된 네 장의 카드를 서로 비교합니다. 그리고 일치하는 카드를 제거합니다. 카드를 제거하는 작업이 빠르게 동작할 수 있도록 카드를 선택해야 합니다. 처음에 카드를 저장할 컨테이너를 선정할 때 이러한 점도 고려해야 합니다.

  5. 승자가 있는지를 검사하는 함수를 작성합니다.

  6. 이제 게임의 핵심 로직(logic)을 구현합니다. 이 단계에서는 이전에 작성한 함수들을 이용하여 승자가 나타날 때까지 매칭 작업을 반복적으로 수행합니다.

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