게임 속 카지노에 들어갈 포커 족보 알고리즘을 만들었다.
private HandRank HandRanking(List<Card> WhosHand)
{
int flushCount = 0;
int straightCount = 0;
int pairCount = 0;
bool isFlush = false;
bool isStraight = false;
bool isRoyal = false;
//숫자 순 정렬
for (int i = 0; i < WhosHand.Count; i++)
{
for (int j = 0; j > WhosHand.Count; j++)
{
if ((int)WhosHand[i].RankOfCard > (int)WhosHand[j].RankOfCard)
{
var temp = WhosHand[i];
WhosHand[i] = WhosHand[j];
WhosHand[j] = temp;
}
}
}
for (int i = 0; i < WhosHand.Count - 1; i++)
{
if ((int)WhosHand[i].RankOfCard + 1 == (int)WhosHand[i + 1].RankOfCard)
{
straightCount++;
}
if ((int)WhosHand[i].RankOfCard == (int)WhosHand[i + 1].RankOfCard)
{
pairCount++;
}
if (WhosHand[i].SuitOfCard == WhosHand[i + 1].SuitOfCard)
{
flushCount++;
}
}
if (flushCount == 4) isFlush = true; //플러시
if (straightCount >= 3)
{
if ((int)WhosHand[0].RankOfCard == 1 &&
(int)WhosHand[4].RankOfCard == 13)
{
isRoyal = true; //로얄,마운틴
isStraight = true;
}
if (straightCount == 4) isStraight = true; //스트레이트
}
if (pairCount == 1) return HandRank.Pair; //원페어
else if (pairCount == 2)
{
if (WhosHand.GroupBy(card => card.RankOfCard).Count(group => group.Count() == 2) == 2)
{
//투페어
return HandRank.TwoPair;
}
//트리플
else return HandRank.ThreeOfAKind;
}
else if (pairCount == 3)
{
if (WhosHand.GroupBy(card => card.RankOfCard).Any(group => group.Count() == 4))
{
//포카드
return HandRank.FourOfAKind;
}
else return HandRank.FullHouse; //풀하우스
}
if (isStraight == true)
{
if (isFlush == true && isRoyal == true) return HandRank.RoyalStraight; //로얄스트레이트플러시
else if (isFlush == true) return HandRank.StraightFlush; //스트레이트플러시
else if (isRoyal == true) return HandRank.Mountain; //마운틴
else return HandRank.Straight; //스트레이트
}
else if (isFlush == true) return HandRank.Flush; //플러시
return HandRank.Top;
}
파이브카드 포커라 족보 구현이 그나마? 간단? 했다.
우선 오름차 배열로 선택 정렬한 후
Hand[i] 번째 카드 값 + 1 == Hand[i+1] 번째 카드 값과 같다면
Straight 카운트를 하나 늘려서
4라면 스트레이트
3이지만 A로 시작해서 K로 끝난다면 마운틴
같은 식으로 우겨 넣어서 만들었다
같은 패가 있다면 Pair카운트를 늘리고
같은 문양이 있다면 Flush 카운트를 늘려서
Pair카운트가 2인데 같은 랭크끼리 묶은 그룹이 2개라면 투페어
아니라면 트리플
Pair카운트가 3인데 같은 랭크끼리 묶은 그룹의 길이가 4라면 포카드
아니라면 풀하우스
Flush카운트가 4라면 플러시
플러시면서 스트레이트라면 스트레이트 플러시
플러시면서 스트레이트이면서 마운틴이라면 로얄 스트레이트 플러시
다 아니라면 탑
같은 방식으로 최대한 간단하게 하드코딩했다 ㅎㅎ
그럼 이만 TTE
1007 TIL - 유니티 InputSystem (5) | 2024.10.07 |
---|---|
1002 TIL - 프로젝트 5일차 (0) | 2024.10.02 |
0930 TIL - 프로젝트 3일차 (1) | 2024.10.01 |
0927 TIL - 프로젝트 2일차 (1) | 2024.09.27 |
0926 TIL? - 팀 프로젝트 돌입 (0) | 2024.09.26 |