役を確認する
check は、役を確認する関数です。
手札を配列として、印と数字毎の枚数を数えて、以下のどの系統の役か判別します。
- フラッシュ系
- ストレート系
- ペア系
/* 役を確認する */
int check(int player[M]) {
int i;
int npair; /* ペアの数 */
int flag_f;/* フラッシュの確認フラグ */
int flag_s;/* ストレートの確認フラグ */
int flag_3;/* スリーカードの確認フラグ */
int s[4]; /* 印毎の枚数 */
int n[13]; /* 数字毎の枚数 */
/* 配列を初期化する */
for (i = 0; i < 4; i++) s[i] = 0;
for (i = 0; i < 13; i++) n[i] = 0;
for (i = 0; i < M; i++) {
int s0, n0;/* カードの印と数字 */
/* 番号をカードに換算する */
calc(player[i], &s0, &n0);
/* 換算したカードの印と数字の枚数を追加する */
s[s0]++;
n[n0]++;
}
/* フラッシュ系 */
flag_f = 0;
for (i = 0; i < 4; i++) {
if (s[i] == M) {
flag_f = 1;
break;
}
}
/* ストレート系 */
for (i = 0; i < 10; i++) {/* ストレートの低位の数字は 1 から 10 まで */
int j;
flag_s = 1;
for (j = 0; j < M; j++) {
if (n[(i + j) % 13] != 1) {/* 13 は 1 と連なる */
flag_s = 0;
break;
}
}
if (flag_s) {
if (flag_f) {
if (i == 9) {
return(9);/* ロイヤル・ストレート・フラッシュ */
} else {
return(8);/* ストレート・フラッシュ */
}
} else {
return(4);/* ストレート */
}
break;
}
}
if (flag_f) return(5);/* フラッシュ */
/* ペア系 */
flag_3 = 0;
npair = 0;
for (i = 0; i < 13; i++) {
if (n[i] == 4) return(7);/* フォーカード */
else if (n[i] == 3) flag_3 = 1;
else if (n[i] == 2) npair++;
}
if (flag_3) {
if (npair == 1) return(6);/* フルハウス */
else return(3);/* スリーカード */
} else {
if (npair == 2) return(2);/* ツーペア */
else if (npair == 1) return(1);/* ワンペア */
}
return(0);/* ノーペア */
}
- トランプ・ポーカー
- トランプ・ブラックジャック
- ギャンブルから株式為替まで役立つ資金管理
- 株式投資や為替取引のリスクマネジメント
- カード被害が預金者保護法で補償された体験
- アニメで英会話/台詞逆輸入
- 右脳と左脳を鍛える開発トレーニング