我正在用 PHP 开发一个非常小的二十一点游戏。
我目前正在编写计算牌的函数,但是 A 正在踢我的屁股。
我的卡片都是这样排列的:
$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 的王牌,但显然这会导致问题。我觉得我需要继续循环以确保 A 不会让我们超过 21,但我不完全确定最好的方法来做到这一点。
伙计们,我将不胜感激。 编辑:
我能想到的最好的就是将它添加到函数中
foreach ($cards as $card) {
if (substr($card, 1) == "a") {
if ($card_values + 11 <= 21) {
$card_values += 11;
}
else {
$card_values += 1;
}
}
}
其实我觉得这可能行得通。给我几分钟测试一下。
编辑:
不,没有工作。4, ace, ace, 6 就这样出来了 22。