이 질문에서 이미 얻은 훌륭한 답변을 보완하기 위해 기본 분류 기술을 사용하면 손을 비교하는 가장 간단한 방법 중 하나를 제공하는 것이 도움이 될 것이라고 생각했습니다. 우선 , 많은 답변이 제안한 것처럼 클래스에 손을 태그하고 싶을 것 입니다. '손 X보다 손 X가 더 낫습니까?' 두 손의 수업을 비교하고 어떤 수업이 더 나은지 확인하면됩니다. 나머지의 경우 실제로는 카드별로 비교해야하며 분류 작업이 조금 더 쉬워 질 것입니다.
기본 사례로 양손이 '높은 카드'손인 상황을 고려하십시오. 이 경우 가장 높은 두 개의 카드를 먼저 비교 한 후 다음 두 개의 카드 등을 (일치하는 경우) 비교합니다. 각 입력 핸드가 가장 높은 카드에서 가장 낮은 카드로 정렬되어 있다고 가정하면이 접근 방식은 다음과 같은 코드를 생성합니다. 이:
int CompareHandsOfSameClass(Hand h1, Hand h2) {
for ( int i = 0; i < 5; i++ ) {
if ( h1[i].rank > h2[i].rank ) {
return -1;
} else if ( h1[i].rank < h2[i].rank ) {
return 1;
}
}
return 0;
}
이제 좋은 소식 :이 사전 순서 는 적절하게 조정되어 어느 한 손에서 두 손을 비교하는 데 효과적 이라는 것이 밝혀졌습니다수업이 동일하다면 수업 중 예를 들어, 페어를 비교하는 방법은 페어를 먼저 비교 한 다음 다른 3 장의 카드를 비교하는 것이므로, 페어를 먼저 (또는 페어의 한 카드까지 먼저) 배치하기 위해 손을 정렬하고 동일한 비교를 실행할 수 있습니다. (예를 들어, A9772와 같은 손은 77A92 또는 더 나은 7A927로 저장됩니다. 손 A9972는 9A729로 저장되며 위의 코드와 비교하여 7을 9에 대입하여 시작합니다. A9972 원). 두 쌍의 손은 두 쌍 중 높은 쪽이 먼저, 그 다음 낮은 쪽이 '키커'로 저장됩니다 (예 : A9977은 97A97로 저장됩니다). 종류 중 3 개는 3 개 중 하나의 카드에 먼저 저장 한 다음 키커, 다른 카드에 저장합니다 (예 : A7772는 7A277입니다). 풀 하우스는 3 개 중 1 개와 2 개 중 하나가 저장됩니다 (예 : 99777은 79779로 저장 됨). 스트레이트와 플러시는 모두 높은 카드 핸드처럼 비교되기 때문에 '직접 렉시 그래픽'순서로 저장할 수 있습니다. 이것은 이미 주어진 기능으로 모든 클래스의 손에서 작동하는 간단한 외부 비교기 기능으로 이어집니다.
// Compare two hands, returning -1/0/+1 as hand 1 is less than, equal to,
// or greater than hand 2. Note that this function assumes the hands have
// already been classified and sorted!
int CompareHands(Hand h1, Hand h2) {
if ( h1.handClass > h2.handClass ) {
return -1;
} else if ( h1.handClass < h2.handClass ) {
return 1;
} else {
return CompareHandsOfSameClass(h1, h2);
}
}
잘만되면 이것이 도움이 될 것입니다!