私はブラックジャックのPHPバージョンを書いています。エースの扱いに問題があります。このゲームのコーディングに関しては、これが特に問題であることを私は知っています。他の人からの質問をいくつか見てきましたが、探しているものが見つかりません。
問題は、特定のカードに対してgetValue関数が呼び出されると、そのカードに対しては再度呼び出されないという事実にあると思います。たとえば、エースと7(8または18)でヒットし、10(18または28に変換)を取得した場合に、getValue関数を再度呼び出す方法はありますか?私が作成したゲームでは、合計を取得するためにカードを再度チェックしないため、そのシナリオでは破綻します。
コードは以下のとおりです。私はそれが文脈から理解できることを願っています、そして私は問題を十分に説明しました。
function getValue($drawn, $total){
$splitter = str_split($drawn);
$value = $splitter[0];
if($value == 'j' or $value == 'q' or $value == 'k' or $value == 1){
$value = 10;
}else if($value == 'a' and (($total + 11) > 21)){
$value = 1;
}else if($value == 'a' and (($total + 11) <= 21)){
$value = 11;
}else{
$value = $value;
}
return $value;
}
function calculateScore($cardsArray){
for($i = 0; $i < count($cardsArray); ++$i){
$total += getValue($cardsArray[$i]);
}
return $total;
}