我正在写一个二十一点的PHP版本。我在处理A账时遇到了麻烦。我知道在编写这个游戏时这是一个特别的问题。我已经看过其他人提出的其他一些问题,但我找不到我正在寻找的东西。
我认为问题在于,一旦针对特定卡调用了getValue函数,它就不再为该卡调用它。有没有办法让它再次调用getValue函数,例如,如果你用ace和7(8或18)命中并得到10(将其变为18或28)。随着我已经建立的游戏,它在那种情况下会破产,因为它不会再次检查卡片以获得总数。
代码如下。我希望它脱离背景是有道理的,我已经很好地解释了这个问题。
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;
}
答案 0 :(得分:0)
如果您只想获得最终cardsArray
的最终得分,则可以使用rsort()
将数组从高到低排序,以便始终计算ace值,因此您不需要稍后重新评估。
答案 1 :(得分:0)
需要“知道”何时基于一组通用卡有两种总价值可能性,这是在这里使用OOP的一个很好的理由。
您可以拥有一个hand
课程,您可以与card
人交流,如果您的卡片是ace
,则您知道它有两个值。
收到王牌后,你可以复制你的手并双手直到结束,或者你可以写hand
和card
类,使$hand->getTotal()
返回一个数组< em>所有可能的总数。
使用OOP这很容易。