1

私はブラックジャックの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;
}
4

2 に答える 2

0

ファイナルのファイナルスコアがcardsArray必要な場合は、配列を高から低に並べ替えrsort()て、エース値が常に最後にカウントされるようにすることができます。したがって、後で再評価する必要はありません。

于 2012-08-25T00:55:55.177 に答える
0

1つの一般的なカードのセットに基づいて2つの合計値の可能性がある場合に「知る」必要があるのは、ここでOOPを使用する十分な理由です。

あなたはあなたがshandを扱うクラスを持つことができますcard、そしてあなたのカードがaceあなたであるならばあなたはそれが2つの価値を持っていることを知っています。

エースを受け取ったら、手を複製して両手を最後まで実行するか、可能なすべての合計を含む配列を返すようhandcardクラスを作成することができます。$hand->getTotal()

これは、OOPを使用すると簡単に行えます。

于 2012-08-25T07:53:37.907 に答える