Zha Jinhua ゲームの大小の競争を実現するための PHP メソッド、php Jinhua_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:04:32
オリジナル
880 人が閲覧しました

PHPでZha Jinhuaゲームの大競争と小競争を実現する方法、php Golden Flower

この記事の例では、PHPでZha Jinhuaゲームの大競争と小競争を実現する方法を説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

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

中学生の頃、午後の放課後、道端に隠れて金の花を作ってお金を賭けていたのを今でも覚えています。今では旧正月の時期に、ハマっていたようです。私たちはよく一緒に金の花を作ってお金を賭けますが、毎回みんな負けてしまいます。

今日は太陽が明るく輝いています。清明節の間に遊びに行っただけなので、今日はどこにも行きませんでした。何もすることがないときに、Golden Flower の 2 つのカードの大きさを比較するプログラムを使用する方法を考えました。実際に実装してみると、いくつかの方法が非常に重要なので、書き留めておきます。

さて、これ以上ナンセンスはやめてください。

Zhajinhua の 2 つのカードのデッキ間の比較ルールには触れません: JQK

アイデア: 金色の花を結ぶ

1. 2 組のカードをランダムに生成します。各デッキの構成は次のとおりです。
コードをコピーします コードは次のとおりです: array( 配列('スペード','K')、
配列('クラブ','6')、
配列('スペード','J')、
)

コードをコピーします コードは次のとおりです: array( 配列('スペード','K')、
配列('クラブ','6')、
配列('スペード','J')、
)

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

各カードのスコアは 2 桁の数字です。たとえば、「A」: 14、「10」: 10、「2」: 「02」のように、先頭に 0 が追加されます。 「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)
复制代码代码如下: クラス PlayCards
{
    public $suits = array('スペード', 'ハート', 'ダイヤモンド', 'クラブ'); 
    public $figures = array('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'、'A'); 
    public $cards = array(); 
    パブリック関数 __construct()
    {
        $cards = 配列(); 
        foreach($this->suits as $suit){
            foreach($this->figures as $figure){
                $cards[] = 配列($suit,$figure); 
            }
        }
        $this->cards = $cards; 
    }
    パブリック関数 getCard()
    {
        シャッフル($this->カード); 
        //生成3张牌
        return array(array_pop($this->cards), array_pop($this->cards), array_pop($this->cards));    
    }
    パブリック関数 CompareCards($card1,$card2)
    {
        $score1 = $this->ownScore($card1); 
        $score2 = $this->ownScore($card2); 
        if($score1 > $score2) 1 を返します。 
        elseif($score1 < $score2) return -1; 
        0を返します。        
    }
    プライベート関数 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,'0',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]){
            $スコア += 60*100000; 
        }
        //金花 30*100000
        if($suit[0] == $suit[1] && $suit[0] == $suit[2]){
            $スコア += 30*100000; 
        }
        //顺子 20*100000
        if($figure[0] == $figure[1]+1 && $figure[1] == $figure[2]+1 || implode($figure) =='140302'){
            $スコア += 20*100000; 
        }
        //对子 10*100000
        if($figure[0] == $figure[1] && $figure[1] != $figure[2]){
 
            $スコア += 10*100000; 
        }
        $score を返します。 
    }
}
 
//テスト
$playCard = 新しい PlayCard(); 
$card1 = $playCard->getCard(); 
$card2 = $playCard->getCard(); 
$result = $playCard->compareCards($card1,$card2); 

echo 'card1 は ',printCard($card1),'
'; 
echo 'card2 は ',printCard($card2),'
'; 
$str = 'カード1をカード2に追加'; 
if($result == 1) $str = 'カード 1 はカード 2 より大きい'; 
elseif($result == -1) $str = 'カード1はカード2より小さい'; 
エコー $str; 
関数 printCard($card)
{
    $str = '(';
    foreach($card as $v){
        $str .= $v[0].$v[1].','; 
    }
    戻りトリム($str,',').')'; 
}
复制代码代码如下: クラス PlayCards
{
    public $suits = array('スペード', 'ハート', 'ダイヤモンド', 'クラブ'); 
    public $figures = array('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'、'A'); 
    public $cards = array(); 
    パブリック関数 __construct()
    {
        $cards = 配列(); 
        foreach($this->suits as $suit){
            foreach($this->figures as $figure){
                $cards[] = 配列($suit,$figure); 
            }
        }
        $this->cards = $cards; 
    }
    パブリック関数 getCard()
    {
        シャッフル($this->カード); 
        //生成3张牌
        return array(array_pop($this->cards), array_pop($this->cards), array_pop($this->cards));    
    }
    パブリック関数 CompareCards($card1,$card2)
    {
        $score1 = $this->ownScore($card1); 
        $score2 = $this->ownScore($card2); 
        if($score1 > $score2) 1 を返します。 
        elseif($score1 < $score2) return -1; 
        0を返します。        
    }
    プライベート関数 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             $figure[$i] = str_pad($figure[$i],2,'0',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]){
            $スコア += 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) =='140302'){ 
            $score += 20*100000; 
        } 
        //对子 10*100000
        if($figure[0] == $figure[1] && $figure[1] != $figure[2]){
 
            $スコア += 10*100000; 
        }
        $score を返します。 
    }
}
 
//テスト
$playCard = 新しい PlayCard(); 
$card1 = $playCard->getCard(); 
$card2 = $playCard->getCard(); 
$result = $playCard->compareCards($card1,$card2); 

echo 'card1 is ',printCard($card1),'
'; 
echo 'card2 is ',printCard($card2),'
'; 
$str = 'card1 equit card2'; 
if($result == 1) $str =  'card1 is larger than card2'; 
elseif($result == -1) $str = 'card1 is smaller than card2'; 
echo $str; 

function printCard($card) 

    $str = '('; 
    foreach($card as $v){ 
        $str .= $v[0].$v[1].','; 
    } 
    return trim($str,',').')'; 
}

希望本文所述对大家的php程序设计有所帮助。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/965567.htmlTechArticlePHP实现扎金花游戏之大小比赛的方法,php金花 本文实例讲述了PHP实现扎金花游戏之大小比赛的方法。分享给大家供大家参考。具体分析如下...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート