나는 블랙 잭의 PHP 버전을 쓰고있다. 에이스를 다루는데 문제가 있습니다. 나는 이것이이 게임을 코딩 할 때 특별한 문제라는 것을 알고있다. 나는 다른 사람들이 물어 보았던 다른 질문들에 대해 살펴 보았지만, 내가 찾고있는 것을 찾을 수는 없다.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;
}
에이스를 일관되게''a ''로 코딩하고 있습니까? 아니면 때로는'1'로 인코딩합니까? 네 번째 줄에는'or $ value == 1'이있어서 나를 후자로 의심하게 만듭니다. – wallyk
우선, getValue를 1 개의 매개 변수로 호출하고, 범위에 $ total isnt가 정의되어 있는지, "... $ value == 'k'또는 $ value == 1 ..."이라고 말하면서 " $ 값 = $ 값; " –
그 라인은 10h, 10d, 10s, 10c로 저장되는 10s를 다루는 것입니다. str_split은 배열에서 문자열의 첫 번째 값만 가져 오므로 그렇게하지 않으면 1로 계산됩니다. :) Oh 및 $ value = $ value는 1 - 9로 계산되기 때문에 1d, 2d, 3d 등으로 저장되기 때문에 str_split은 숫자를 값으로 사용합니다. – nerdarama