合計点数を計算する

calc は、手札の合計点数を計算するサブルーチンです。

  • 絵札 (J, Q, K) は 10 点
  • A は 1 点としても 11 点としてもよい
  • カードの印(スペード/ハート/ダイヤモンド/クラブ)は考慮しない
  • 合計点数が 21 点を超えると 0 点

#合計点数を計算する
sub calc {
  local(@hands) = @_;
  local(@numbers, $point, $na);

  #数字を取出す
  foreach (@hands) {
    $_ =~ /[A-Z](\d+)/;#「アルファベットと 1 文字以上の数字」の数字部分を取出す
    push(@numbers, $1);
  }

  foreach (@numbers) {
    if ($_ <= 10) {
      $point += $_;

      $na++ if ($_ == 1);#A の枚数を数える
    } else {#絵札は 10 点
      $point += 10;
    }
  }

  if      ($point <= 11) {#A は 1 点としても 11 点としてもよい
    $point += 10 if ($na);
  } elsif ($point >= 22) {#合計点数が 21 点を超えていたら 0 点にする
    $point = 0;
  }

  $point;
}