トランプのポーカーゲームを作成せよ。という課題が出たのですが、ワンペア、ツーペア、スリーカード、フルハウス、フォーカードはswitch文を使って表示することはできたのですが、フラッシュ、ストレート、ストレートフラッシュ、ロイヤルストレートフラッシュ、ノーペアの表示がうまくできません。また、ペアについてもたまに2個役が出てしまうことがあります。
以下にポーカーの役判定の部分のプログラムを載せておきます。
rankは1~13、suitcodeは0をハート、1をダイヤ、2をクラブ、3をスペードを意味しています。
また、このコードの前にシャッフルしたカードの中から選んだ5枚のカードの数字を小さい順に並べ替えています。
n = 0;
for(i=0; i<4; i++)
{
for(j=i+1; j<5; j++)
{
if(card[i].rank == card[j].rank)
{
n++;
switch( n )
{
case 1:
printf("ワンペア\n");
break;
case 2:
printf("ツーペア\n");
break;
case 3:
printf("スリーカード\n");
break;
case 4:
printf("フルハウス\n");
break;
case 6:
printf("フォーカード\n");
break;
default:
printf("ノーペア\n");
break;
}
}
}
}
for(i = 0; i < 5; i++)
{
if(max < card[i].rank)
{
max = card[i].rank;
}
if(min > card[i].rank)
{
min = card[i].rank;
}
}
if(max - min <= 4)
{
if(card[0].suit_code == card[1].suit_code == card[2].suit_code == card[3].suit_code == card[4].suit_code)
{
printf("ストレートフラッシュ\n");
}
else
{
printf("ストレート\n");
}
}
if((card[0].suit_code) == (card[1].suit_code) == (card[2].suit_code) == (card[3].suit_code) == (card[4].suit_code))
{
printf("フラッシュ\n");
}
if((card[0].rank == 1) && (card[1].rank == 10) && (card[2].rank == 11) && (card[3].rank == 12) && (card[4].rank == 13))
{
printf("ロイヤルストレートフラッシュ\n");
}
D6 CJ DJ H5 D5
ワンペア ←これいらないですよね?
ツーペア
SK CA C9 H3 S5
フラッシュ ←フラッシュじゃなくて、ノーペアですよね?
D4 C10 C4 H8 S2
ワンペア
フラッシュ ←これいらないですよね?
お手数をおかけしますが、助けてください。お願いします。