私は PHP で非常に小さなブラックジャック ゲームに取り組んでいます。
私は現在カードを数える関数を書いていますが、エースは私のお尻を蹴っています。
私のカードはすべて次のような配列になっています。
$card_array = array( "ca", "c10", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9",
"cj", "ck", "cq", "da", "d10", "d2", "d3", "d4", "d5", "d6", "d7", "d8",
"d9", "dj", "dk", "dq", "ha", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9",
"hj", "hk", "hq", "sa", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9",
"s10", "sj", "sk", "sq");`
最初の文字がスーツで、それ以降はすべてカードです (j はジャックなど)。
これまでの値をカウントするために私が持っているものは次のとおりです。
function bj_calculate_values( $cards ) {
$card_values = 0;
foreach ($cards as $card) {
if (substr($card, 1) == "k" || substr($card, 1) == "q" || substr($card, 1) == "j") {
$card_values += 10;
}
else if (substr($card, 1) != "a") {
$card_values += substr($card, 1);
}
}
}
もともと、私は 11 のエースも持っていましたが、明らかに問題が発生します。エースで 21 を超えないように、繰り返しループし続ける必要があると思いますが、それを実行するための最善の方法が完全にはわかりません。
皆さん、いくつかの意見をいただければ幸いです。 編集:
私が考えることができる最善のことは、これを関数に追加することです
foreach ($cards as $card) {
if (substr($card, 1) == "a") {
if ($card_values + 11 <= 21) {
$card_values += 11;
}
else {
$card_values += 1;
}
}
}
実際、これはうまくいくかもしれないと思います。テストに数分ください。
編集:
いいえ、うまくいきませんでした。4、エース、エース、6が出てこれで22になりました。