calc は、手札の合計点数を計算する関数です。
- 絵札 (J, Q, K) は 10 点
- A は 1 点としても 11 点としてもよい
- カードの印(スペード/ハート/ダイヤモンド/クラブ)は考慮しない
- 合計点数が 21 点を超えると 0 点
/* 合計点数を計算する */
int calc(int nHands, char Hands[NMAX][CMAX]) {
int n;
int point; /* 合計点数 */
int na; /* A の枚数 */
int numbers[NMAX];/* カードの数字 */
char tmp[3];
/* 数字を取出す */
for (n = 0; n < nHands; n++) {
int i;
/* 「アルファベットと数字」の数字部分を取出す */
for (i = 0; i < 3; i++) tmp[i] = Hands[n][i + 1];
numbers[n] = atoi(tmp);
}
point = na = 0;
for (n = 0; n < nHands; n++) {
if (numbers[n] <= 10) {
point += numbers[n];
if (numbers[n] == 1) na++;/* A の枚数を数える */
} else {/* 絵札は 10 点 */
point += 10;
}
}
if (point <= 11) {/* A は 1 点としても 11 点としてもよい */
if (na) point += 10;
} else if (point >= 22) {/* 合計点数が 21 点を超えていたら 0 点にする */
point = 0;
}
return(point);
}