ホームページ  >  記事  >  バックエンド開発  >  Zha Jinhua ゲーム PHP 実装コード サイズ コンテスト

Zha Jinhua ゲーム PHP 実装コード サイズ コンテスト

WBOY
WBOYオリジナル
2016-08-08 09:28:451067ブラウズ

Zha Jinhua ゲーム PHP 実装コード サイズ コンテスト

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

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

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

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

2 つのデッキのカードを「ゴールデン フラワー」と比較するためのルールには触れません。「JQK < A23 < QKA」

アイデア: 「ゴールデン フラワー」 net/ )

1" ランダムに 2 組のカードを生成します。各デッキの構造は

[php] plaincopyprint を表示?

  1. array(
  2. )、 array( 'クラブ')
  3. '6')、 )、)
  4. array(
        array(&#39;Spade&#39;,&#39;K&#39;),
        array(&#39;Club&#39;,&#39;6&#39;),
        array(&#39;Spade&#39;,&#39;J&#39;),
    )
    2」 各デッキのカードのスコアを計算します。各デッキのカードには元のサイズがあります (つまり、ペア、ストレート、ゴールデンフラワー、ストレートゴールド、およびボビン)、そして 各カードのスコアは、「A」: 14、「10」: 10、「2」: 「02」のように、2 桁未満の先頭に 0 が埋め込まれた 2 桁の数字です。 、「k」: 13、「7」: 07 3 枚のカードをポイントの数に従って (大きい順に) 並べ替え、6 桁の数字を形成します。たとえば、「A27」: 140702、'829。 ': 090802, 'JK8': 131108, '2A10': 141002 例外。ペアの場合は、最初の 2 桁にペアの数を入力します (これが行われる理由は後で説明します)。たとえば、「779」: 070709、'7A7': 070714、'A33': 030314 現在のスコアは 6 桁の数値です。ペアを元の値に 10*100000 を加えた値に設定します。たとえば、「779」になります。 : 1070709、'7A7': 1070714、'A33': 1030314 スムーズの場合 たとえば、'345': 2050403、'QKA': 2141312、'23A': 2140302 のように、結果に 20*100000 を追加します。金華の場合、結果に 30*100000 を追加します。たとえば、「スペード K、スペード 6。、スペード J」: 3131106
    ストレート ゴールドは、実際には黄金の花とストレート チャイルドの合計であるため、ストレート ゴールドです。例: 'Spade 7, Spade 6, Spade 8': 5080706
  5. ボビンの場合、結果に 60*100000 を追加します。 たとえば、'666': 6060606, 'JJJ'。 : 61111113" 2 枚のカードの大きさを比較します (計算されたポイントを使用して比較します)
とても簡単です! !

コードは次のとおりです(PHP)

[php] plaincopyprint を表示しますか?

  1. class PlayCards
  2. {
  3. public $スーツ = 配列('スペード' 「ハート」「ダイヤモンド」「クラブ」);  
  4. public $figures = array('2', '3', '4''5 ', '6', '7', '8', '9', '10', 「J」 , 'Q', 'K', 'A');  
  5. public $cards = array();  
  6. public function __construct()
  7. {
  8. $cards = 配列();  
  9. foreach($this->スーツ as $スーツ){
  10. foreach($this- >図 as $図){

  11. $cards[] = 配列 ($スーツ,$フィギュア);  
  12. }
  13. }
  14. $this->カード = $カード;  
  15. }
  16. public function getCard()
  17. {
  18. シャッフル($this->カード);  
  19. // 生成3张牌
  20. return array(array _pop($this->カード)、array_pop ($this->カード)、array_pop($this->カード));     
  21. }  
  22. public function compareCards($card1,$card2)
  23. {
  24. $score1 = $this ->ownScore($card1);  
  25. $score2 = $this->ownScore($card2);  
  26. if($スコア1 > $スコア2) return 1;  
  27. elseif($スコア1 < $スコア2) return -1;  
  28. return 0;         
  29. }
  30. プライベート 機能 ownScore($card)
  31. {
  32. $suit = $figure = array();  
  33. foreach($card as $v){
  34. $スーツ[] = $v[0 ];  
  35. $figure[] = array_search($v[1],$this->figuレス)+2;  
  36. }
  37. //补齐前导0
  38. ($i = 0; $i < 3; $i++){
  39. $figure[$i] = str_pad($figure [$i],2, '0',STR_PAD_LEFT);  
  40. }
  41. rsort($figure);  
  42. //对子做特殊処理
  43. if($figure[1 ] == $figure[2]){
  44. $temp = $figure[0];  
  45. $figure[0] = $figure[2];  
  46. $figure[2] = $temp;  
  47. }
  48. $スコア //ボビン60 *100000 [0] == $図
  49. [2]){
  50. // ゴールデンフラワー 30*100000
  51. (
  52. $suit[0] == $suit[1] && [0] == $スーツ [2]){
  53. ] = = $フィギュア[1]+1 && $フィギュア
  54. [1] == $フィギュア
  55. [2]+1 || 内破($figure) == '140302'
  56. ){ //ペア 10*100000 if($figure
  57. [0] == $figure[1] && $figure
  58. [1] != $figure
  59. [2]){
  60. //test
  61. $playCard = new PlayCards();
  62. $card1 = $playCard->getCard();  
  63. $card2 = $playCard->getCard();  
  64. $result = $playCard->compareCards($card1,$card2);  
  65.   
  66. echo 'card1 is ',printCard($card1),'
    '
    ;  
  67. echo 'card2 is ',printCard($card2),'
    '
    ;  
  68. $str = 'card1 equit card2';  
  69. if($result == 1) $str =  'card1 is larger than card2';  
  70. elseif($result == -1) $str = 'card1 is smaller than card2';  
  71. echo $str;  
  72.   
  73.   
  74. function printCard($card)  
  75. {  
  76.     $str = '(';  
  77.     foreach($card as $v){  
  78.         $str .= $v[0].$v[1].',';  
  79.     }  
  80.     return trim($str,',').')';  
  81. }  
  82. <?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 '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 实现代码之大小比赛,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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