Zhajinhua 게임 PHP 구현 코드 크기 경쟁

WBOY
풀어 주다: 2016-08-08 09:28:45
원래의
1073명이 탐색했습니다.

자진화 게임 PHP 구현 코드 크기 경쟁

프로그램은 알고리즘과 떼려야 뗄 수 없는 존재입니다. 지난 블로그에서 실제로 길 찾기 알고리즘에 대해 논의한 적이 있습니다. 그러나 당시 예제 다이어그램에서는 선택적 경로가 유일한 경로였습니다. 알고리즘을 선택한다는 것은 이 고유한 경로를 선택한다는 의미입니다. 어떻게 선택합니까?

중학교 때 오후에 길가에 숨어 금꽃을 만들어 돈을 도박으로 벌던 일이 아직도 기억나네요. 설날이면 우리는 종종 금화를 만들고 도박을 해서 돈을 벌곤 하는데, 운이 없네. 매번 지는구나.

오늘은 해가 쨍쨍하네요. 청명절에 놀러 나갔기 때문에 오늘은 아무데도 안 갔어요. 할 일이 없을 때 골든플라워에서 두 카드의 크기를 비교하는 프로그램을 어떻게 하면 좋을지 고민하다가 구현해 봤는데 몇 가지 방법이 꽤 중요해서 적어봤습니다.

알겠습니다. 더 이상 말도 안되는 소리는 하지 마세요.

자진화의 두 덱의 비교 규칙은 다루지 않겠습니다. 스트레이트인 경우 표시해 주세요. JQK < A23 < QKA

아이디어: 자진화 (http: //www.a8u.net/)

1" 두 개의 카드 덱을 무작위로 생성합니다. 각 덱의 구조는

[php ] 일반 사본 인쇄를 보시겠습니까?

  1. 배열(
  2. >('스페이드','K'), 
  3.  
  4. 배열('클럽','6'), 
  5.  
  6. 배열('스페이드','J'),
  7. )

2” 각 덱의 점수를 계산합니다. 각 카드 덱에는 원본이 있습니다. 사이즈(즉, 페어, 스트레이트, 골든 플라워, 스트레이트 골드, 튜브 사이즈 제외),
array(
    array(&#39;Spade&#39;,&#39;K&#39;),
    array(&#39;Club&#39;,&#39;6&#39;),
    array(&#39;Spade&#39;,&#39;J&#39;),
)
로그인 후 복사

각 카드의 점수는 2자리 숫자이며, 점수는 2자리 미만입니다. 앞의 0을 보완합니다. 예를 들어 'A': 14, '10': 10, '2': '02', 'k': 13, '7': 07

3개의 카드를 다음과 같이 정렬합니다. 포인트 수(큰 것부터 작은 것까지)까지 6자리 숫자를 구성하세요. 예를 들어 'A27': 140702, '829': 090802, 'JK8': 131108, '2A10': 141002

쌍의 경우에는 예외입니다. (왜 이렇게 하는지 나중에 알 수 있습니다. 예를 들어 '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, 스페이드 8': 5080706

예를 들어 튜브의 경우 결과에 60*100000을 추가합니다. , '666': 6060606, 'JJJ': 6111111

3" 두 카드의 크기를 비교해 보세요. (계산된 포인트를 이용해 비교해보세요)

너무 간단해요! !

코드는 다음과 같습니다(PHP)

[php] 일반 사본을 보시겠습니까?

  1. class PlayCards  
  2. {  
  3.     공개 $suits = 배열('스페이드''하트''다이아몬드' '클럽');  
  4.     공개 $Figures = 배열 ('2''3''4''5''6''7', '8''9''10''J''Q''K''아');  
  5.     공개 $cards = 배열 ();  
  6.     공개 함수 __construct()  
  7.     {  
  8.         $cards = 배열();  
  9.         foreach($this->suits as $suit){  

  10.            foreach($this->숫자 as $Figure){  
  11.                 $카드[] = 배열($suit ,$Figure);  
  12.             }  
  13.         }  
  14.         $this->카드 = $카드;  
  15.     }  
  16.     공개 기능 getCard()  
  17.     {  
  18.         셔플($this->cards) ;  
  19.         //生成3张牌  
  20.         반환 배열(array_pop($this-> 카드), array_pop($this->cards), array_pop ($this->카드));     
  21.   
  22.     }  
  23.     공개 기능 비교카드($card1,$card2)  
  24.     {  
  25.         $score1  = $this->ownScore($card1);  
  26.         $score2 = $this->ownScore($card2);  
  27.         인 경우($score1 > $score2 반품 1;  
  28.         elseif($score1 < $score2 반품 -1;  
  29.         반품 0;         
  30.     }  
  31.       
  32.       
  33.     비공개 기능 ownScore($card)  
  34.     {  
  35.         $suit = $Figure =  배열();  
  36.         foreach($card as  $v){  
  37.            $suit[] = $v[0];  
  38.             $Figure[] = array_search($ v[1],$this->Figures)+2;  
  39.         }  
  40.         //补齐前导0  
  41.         for($i = 0; $i <  3;  $i++){  
  42.            
  43. $그림[$i] = str_pad($Figure[ $i],2,'0',STR_PAD_LEFT);  
  44.         }  
  45.         rsort(
  46. $Figure);  
  47.         
  48. //对于对子做特殊处理  
  49.         
  50. if($Figure[1] == $Figure[2]){  
  51.             
  52. $temp = $Figure[0];  
  53.             
  54. $Figure[0] = $Figure[2];  
  55.             
  56. $Figure[2] = $temp;  
  57.         }  
  58.         $점수 = $Figure[0].$Figure [1].$Figure[2];  
  59.         //筒子 60*100000  
  60.         if($Figure[0] == $Figure[1] && $ 그림[0] == $그림[2]){  
  61.            $ 점수 += 60*100000;  
  62.         }  
  63.         //金花 30*100000  
  64.         if($suit[0] == $suit [1] && $suit[0] == $suit[2]){  
  65.             $score += 30*100000;  
  66.         }  
  67.         //顺子 20*100000  
  68.         if($Figure[0] == $Figure [1]+1 && $Figure[1] == $Figure[2]+1 || ($Figure) =='140302'){  
  69. $점수 += 20*100000;  
  70.         }  
  71.         //对子 10*100000  
  72.         if($Figure[0] == $Figure [1] && $Figure[1] != $Figure[2]){  
  73.   
  74.             $score += 10*100000;  
  75.         }  
  76.         반품 $점수;  
  77.     }  
  78. }
  79. //test
  80. $playCard = new PlayCards();
  81. $card1 = $playCard->getCard();  
  82. $card2 = $playCard->getCard();  
  83. $result = $playCard->compareCards($card1,$card2);  
  84.   
  85. echo 'card1 is ',printCard($card1),'
    '
    ;  
  86. echo 'card2 is ',printCard($card2),'
    '
    ;  
  87. $str = 'card1 equit card2';  
  88. if($result == 1) $str =  'card1 is larger than card2';  
  89. elseif($result == -1) $str = 'card1 is smaller than card2';  
  90. echo $str;  
  91.   
  92.   
  93. function printCard($card)  
  94. {  
  95.     $str = '(';  
  96.     foreach($card as $v){  
  97.         $str .= $v[0].$v[1].',';  
  98.     }  
  99.     return trim($str,',').')';  
  100. }  
  101. <?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教程有兴趣的朋友有所帮助。

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿