ホームページ >バックエンド開発 >PHPチュートリアル >PHPが金の花ゲーム大会を実装
この記事では、主に PHP でフライド ゴールデン フラワー ゲームの実装原理と関連するアルゴリズム技術を分析しています。必要な方は参考にしてください。 it
この記事の例では、PHP でゴールデン フラワー ゲーム コンペティションを実装する方法について説明します。具体的な分析は次のとおりです。
プログラムはアルゴリズムと切り離せません。経路探索アルゴリズムについては前述しました。ただし、当時の例の図ではオプションのパスのみでした。アルゴリズムを選択するということは、この独自のパスを選択することを意味します。それを選択するにはどうすればよいでしょうか。
フライド ゴールデン フラワーの 2 つのデッキを比較するためのルールには触れません。ストレートであることだけを示します。JQK
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」: 61111113 2 つのカードのサイズを比較します (比較には計算されたスコアを使用します)これは非常に簡単です。 ! コードは次のとおりです:
<?php class PlayCards { public $suits = array('Spade', 'Heart', 'Diamond', 'Club'); public $figures = array('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'); 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,'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]){ $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) =='140302'){ $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 'card1 is ',printCard($card1),'<br/>'; echo 'card2 is ',printCard($card2),'<br/>'; $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 class PlayCards { public $suits = array('Spade', 'Heart', 'Diamond', 'Club'); public $figures = array('2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'); 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,'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]){ $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) =='140302'){ $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 'card1 is ',printCard($card1),'<br/>'; echo 'card2 is ',printCard($card2),'<br/>'; $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 は、HTML タグ内の終了タグの検出および補完機能を実装します
PHP は、指定されたサフィックスを実装しますファイル一括アップロード機能
以上がPHPが金の花ゲーム大会を実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。