我在寫一個二十一點的PHP版本。我在處理ace方面遇到了麻煩。我知道在編寫這款遊戲時這是一個特別的問題。我查看了其他人詢問的其他一些問題,但我找不到我正在尋找的內容。PHP二十一點算法算法
我認爲問題在於,一旦爲特定卡調用getValue函數,它就不會再爲該卡調用它。有沒有辦法讓它再次調用getValue函數,例如,如果你用一個ace和一個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編碼爲「a」,還是有時編碼爲「1」?第四行有'或$ value == 1',這讓我懷疑後者。 – wallyk
對於初學者來說,你使用1參數調用getValue,$範圍內沒有定義$ total,你的意思是「... $ value =='k'或$ value == 1 ...」,你在「 $ value = $ value;「 –
該行處理存儲爲10h,10d,10s,10c的10s。 str_split只取得數組中第一個字符串的值,所以如果我沒有這樣做的話,它會算作1。 :) 哦,$ value = $值用於計數1-9,因爲它們存儲爲1d,2d,3d等,所以str_split將數字作爲值。 – nerdarama