ホームページ  >  記事  >  バックエンド開発  >  PHPが金の花ゲーム大会を実装

PHPが金の花ゲーム大会を実装

墨辰丷
墨辰丷オリジナル
2018-06-12 17:33:183285ブラウズ

この記事では、主に PHP でフライド ゴールデン フラワー ゲームの実装原理と関連するアルゴリズム技術を分析しています。必要な方は参考にしてください。 it

この記事の例では、PHP でゴールデン フラワー ゲーム コンペティションを実装する方法について説明します。具体的な分析は次のとおりです。

プログラムはアルゴリズムと切り離せません。経路探索アルゴリズムについては前述しました。ただし、当時の例の図ではオプションのパスのみでした。アルゴリズムを選択するということは、この独自のパスを選択することを意味します。それを選択するにはどうすればよいでしょうか。

フライド ゴールデン フラワーの 2 つのデッキを比較するためのルールには触れません。ストレートであることだけを示します。JQK

1。ランダムに 2 枚のカードを生成します。各デッキの構成は次のとおりです:

array(  
    array('Spade','K'),  
    array('Club','6'),  
    array('Spade','J'),  
)

コードは次のとおりです:

array(  
    array('Spade','K'),  
    array('Club','6'),  
    array('Spade','J'),  
)

2. 各デッキのカードのスコアを計算します。各デッキのカードには元のサイズ (つまり、ペア、ストレート、ゴールデン フラワー、ストレート ゴールド、およびボビンを除く) があり、その後、

各カードのスコアは 2 桁の数字です。2 桁に満たない場合は先頭に 0 を追加します (例: 'A': 14、'10': 10、'2': '02'、'k': 13)。 , 「7」: 07

は 3 になります。カードはサイズ順 (大きいものから小さいもの) に分類され、6 桁の数字が形成されます。たとえば、「A27」: 140702、「829」: 090802、「JK8」: 131108、「2A10」: 141002

例外として、ペアの場合は、ペアの桁数を最初の部分に配置する必要があります。 2 桁 (後で説明します) これが行われる理由を参照してください)。たとえば、「779」: 070709、「7A7」: 070714、「A33」: 030314

現在のスコアは 6 桁の数値であり、ペアは元の値に 10*100000 を加えた値に設定されます。これで7桁の数字になりました。たとえば、「779」: 1070709、「7A7」: 1070714、「A33」: 1030314

ストレートの場合、結果に 20*100000 を追加します。たとえば、「345」: 2050403、「QKA」: 2141312、「23A」: 2140302

金色の花の場合は、結果に 30*100000 を追加します。たとえば、「スペード K、スペード 6、スペード J」: 3131106

ストレート ゴールドは実際には黄金の花とストレートの子の合計であるため、ストレート ゴールドは 50*10000 になるはずです。たとえば、「スペード 7、スペード 6、スペード 8」: 5080706

チューブの場合、結果に 60*100000 を加算します。たとえば、「666」: 6060606、「JJJ」: 6111111

3 2 つのカードのサイズを比較します (比較には計算されたスコアを使用します)

これは非常に簡単です。 !

コードは次のとおりです:

<?php  
class PlayCards  
{  
    public $suits = array(&#39;Spade&#39;, &#39;Heart&#39;, &#39;Diamond&#39;, &#39;Club&#39;);  
    public $figures = array(&#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;10&#39;, &#39;J&#39;, &#39;Q&#39;, &#39;K&#39;, &#39;A&#39;);  
    public $cards = array();  
    public function __construct()  
    {  
        $cards = array();  
        foreach($this->suits as $suit){  
            foreach($this->figures as $figure){  
                $cards[] = array($suit,$figure);  
            }  
        }  
        $this->cards = $cards;  
    }  
    public function getCard()  
    {  
        shuffle($this->cards);  
        //生成3张牌  
        return array(array_pop($this->cards), array_pop($this->cards), array_pop($this->cards));     
    }  
    public function compareCards($card1,$card2)  
    {  
        $score1 = $this->ownScore($card1);  
        $score2 = $this->ownScore($card2);  
        if($score1 > $score2) return 1;  
        elseif($score1 < $score2) return -1;  
        return 0;         
    }  
    private function ownScore($card)  
    {  
        $suit = $figure = array();  
        foreach($card as $v){  
            $suit[] = $v[0];  
            $figure[] = array_search($v[1],$this->figures)+2;  
        }  
        //补齐前导0  
        for($i = 0; $i < 3; $i++){  
            $figure[$i] = str_pad($figure[$i],2,&#39;0&#39;,STR_PAD_LEFT);  
        }  
        rsort($figure);  
        //对于对子做特殊处理  
        if($figure[1] == $figure[2]){  
            $temp = $figure[0];  
            $figure[0] = $figure[2];  
            $figure[2] = $temp;  
        }  
        $score = $figure[0].$figure[1].$figure[2];  
        //筒子 60*100000  
        if($figure[0] == $figure[1] && $figure[0] == $figure[2]){  
            $score += 60*100000;  
        }  
        //金花 30*100000  
        if($suit[0] == $suit[1] && $suit[0] == $suit[2]){  
            $score += 30*100000;  
        }  
        //顺子 20*100000  
        if($figure[0] == $figure[1]+1 && $figure[1] == $figure[2]+1 || implode($figure) ==&#39;140302&#39;){  
            $score += 20*100000;  
        }  
        //对子 10*100000  
        if($figure[0] == $figure[1] && $figure[1] != $figure[2]){  
  
            $score += 10*100000;  
        }  
        return $score;  
    }  
}  
  
//test  
$playCard = new PlayCards();  
$card1 = $playCard->getCard();  
$card2 = $playCard->getCard();  
$result = $playCard->compareCards($card1,$card2); 
echo &#39;card1 is &#39;,printCard($card1),&#39;<br/>&#39;;  
echo &#39;card2 is &#39;,printCard($card2),&#39;<br/>&#39;;  
$str = &#39;card1 equit card2&#39;;  
if($result == 1) $str =  &#39;card1 is larger than card2&#39;;  
elseif($result == -1) $str = &#39;card1 is smaller than card2&#39;;  
echo $str;  
function printCard($card)  
{  
    $str = &#39;(&#39;;  
    foreach($card as $v){  
        $str .= $v[0].$v[1].&#39;,&#39;;  
    }  
    return trim($str,&#39;,&#39;).&#39;)&#39;;  
}

コードは次のとおりです:

<?php  
class PlayCards  
{  
    public $suits = array(&#39;Spade&#39;, &#39;Heart&#39;, &#39;Diamond&#39;, &#39;Club&#39;);  
    public $figures = array(&#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;10&#39;, &#39;J&#39;, &#39;Q&#39;, &#39;K&#39;, &#39;A&#39;);  
    public $cards = array();  
    public function __construct()  
    {  
        $cards = array();  
        foreach($this->suits as $suit){  
            foreach($this->figures as $figure){  
                $cards[] = array($suit,$figure);  
            }  
        }  
        $this->cards = $cards;  
    }  
    public function getCard()  
    {  
        shuffle($this->cards);  
        //生成3张牌  
        return array(array_pop($this->cards), array_pop($this->cards), array_pop($this->cards));     
    }  
    public function compareCards($card1,$card2)  
    {  
        $score1 = $this->ownScore($card1);  
        $score2 = $this->ownScore($card2);  
        if($score1 > $score2) return 1;  
        elseif($score1 < $score2) return -1;  
        return 0;         
    }  
    private function ownScore($card)  
    {  
        $suit = $figure = array();  
        foreach($card as $v){  
            $suit[] = $v[0];  
            $figure[] = array_search($v[1],$this->figures)+2;  
        }  
        //补齐前导0  
        for($i = 0; $i < 3; $i++){  
            $figure[$i] = str_pad($figure[$i],2,&#39;0&#39;,STR_PAD_LEFT);  
        }  
        rsort($figure);  
        //对于对子做特殊处理  
        if($figure[1] == $figure[2]){  
            $temp = $figure[0];  
            $figure[0] = $figure[2];  
            $figure[2] = $temp;  
        }  
        $score = $figure[0].$figure[1].$figure[2];  
        //筒子 60*100000  
        if($figure[0] == $figure[1] && $figure[0] == $figure[2]){  
            $score += 60*100000;  
        }  
        //金花 30*100000  
        if($suit[0] == $suit[1] && $suit[0] == $suit[2]){  
            $score += 30*100000;  
        }  
        //顺子 20*100000  
        if($figure[0] == $figure[1]+1 && $figure[1] == $figure[2]+1 || implode($figure) ==&#39;140302&#39;){  
            $score += 20*100000;  
        }  
        //对子 10*100000  
        if($figure[0] == $figure[1] && $figure[1] != $figure[2]){  
  
            $score += 10*100000;  
        }  
        return $score;  
    }  
}  
  
//test  
$playCard = new PlayCards();  
$card1 = $playCard->getCard();  
$card2 = $playCard->getCard();  
$result = $playCard->compareCards($card1,$card2); 
echo &#39;card1 is &#39;,printCard($card1),&#39;<br/>&#39;;  
echo &#39;card2 is &#39;,printCard($card2),&#39;<br/>&#39;;  
$str = &#39;card1 equit card2&#39;;  
if($result == 1) $str =  &#39;card1 is larger than card2&#39;;  
elseif($result == -1) $str = &#39;card1 is smaller than card2&#39;;  
echo $str; 
function printCard($card)  
{  
    $str = &#39;(&#39;;  
    foreach($card as $v){  
        $str .= $v[0].$v[1].&#39;,&#39;;  
    }  
    return trim($str,&#39;,&#39;).&#39;)&#39;;  
}

概要

: 上記がこの記事の全内容です。皆様の学習に役立てば幸いです。

関連する推奨事項:

php は、HTML タグ内の終了タグの検出および補完機能を実装します

PHP は、指定されたサフィックスを実装しますファイル一括アップロード機能

phpのテンプレートファイルの解析と文字列処理

以上がPHPが金の花ゲーム大会を実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。