札金花遊戲 PHP 實現程式碼大小賽

WBOY
發布: 2016-08-08 09:28:45
原創
1085 人瀏覽過

扎金花遊戲 PHP 實現程式碼之大小比賽

程式離不開演算法,在前面的部落格當中,其實我們已經討論過尋路的演算法。不過,在當時的範例圖中,可選的路徑是唯一的。我們挑選一個演算法,就是說要把這個唯一的路徑選出來,怎麼選呢?

還記得上初中的時候經常下午放學就躲在路邊扎金花來賭*錢,貌似還上癮了,現在過年的時候還經常一起扎金花賭*錢,但運氣不啥好,每次都是輸啊。

今天陽光明媚,由於清明節才出去玩了,所以今天沒有去哪裡。閒著沒事就想了下怎麼用程式實現金花中兩幅牌的大小比較,現在把它實現了,有些方法還蠻重要的,因此就記下來。

好了,不廢話了。

扎金花兩副牌的比較規則就不說了,註明一下是順子的時候: JQK

思路:扎金花(http://www.a8u.net/)

1" 隨機產生兩幅牌,每副牌結構為

[php] view plaincopyprint?

  1. array(  
  2.     '),      array( 'Club'
  3. ,
  4. '6'),      ),  
  5. )
  6. 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位數。對於對子要將對子的位數放在前兩位(後面會看到為什麼這麼做)。一個6位數,將對子設為一個原始值加上10*100000的值,現在為一個7位數。子,將結果加上20*100000.。 ,Spade J':3131106   因為順金的時候其實是金花和順子的和,所以順金應該是50*10000。因為順金的時候其實是金花和順子的和,所以順金應該是50*10000。結果加上60*100000。 ! 程式碼如下(PHP)
  7. [php] view plaincopyprint?
    1.  遊戲卡  
    2. {  
    3.  = 
    4. 數組('黑桃' '心''鑽石'、 '俱樂部');  數組('2'
    5. '3', '4''5 ' '8''9''10' 'J' ,  'A');      $卡 = 🎠 public function __construct()      {         $卡 = 數組();   $這個->套裝 
    6. as $套裝){               foreach(
    7. $這個- >數字                 $卡[] = 數組
    8. [] = 數組
    9. ( $套裝$人物);  
    10.                   $這個->卡= $🎠     public 
    11. 函數
    12.  getCard()        洗牌($這個->卡);          //產生3張卡          
    13. return
    14.   ->卡片),array_pop ($這個->卡片), array_pop($這個
    15. ->卡));     
  8.      功能 比較卡($card1)     {          $score1
  9.  = 
  10. $這個$score1
  11.  = 
  12. $這個 ->ownScore($card1);         $card2
  13. );          if ($score1 > $score2
  14. return 1; elseif($score1 $score2 return
  15.  -1;  
  16.          0;                  $卡
  17. )  
  18.     {  
  19.      數組
  20. ();  數組
  21. ();  
  22.         foreach($卡 as $v
  23. ){  
  24.   
  25. $v[0 ];                    = array_search(
  26. $v[1],$這個->圖片)+2;          //補前導0           for
  27. ( $i = 0             $figure
  28. [
  29. $i ] = str_pad($figure[ $i],2,
  30.         }  
  31.         rsort(
  32. $圖);  
  33.         
  34. //使用特殊處理 ($figure[1] ==  $圖 [2]){                $temp
  35.  
  36.             $圖[0] = $圖[2] ;              $圖片[2] =     }
  37.         $score = $figure ];          //筒子 60 *100000  
  38.         if( && $figure
  39. [0] == $figure [2]){              $      }          //金花 30*100000 ($suit[0] == 
  40. $suit[1] && 
  41.             $score
  42.  += 30*100000;          //順子 20*100000  
  43.     ] == $figure[1]+1 && $figure[1] ==  '140302'){              
  44.         }  
  45.         //對子 10*10000 if
  46. (
  47. $figure
  48. [0] == 
  49. $figure[1] &&  ]){  
  50.               $score     }          return $ }  
  51.   
  52. //test  
  53. $playCard = new PlayCards();  
  54. $card1 = $playCard->getCard();  
  55. $card2 = $playCard->getCard();  
  56. $result = $playCard->compareCards($card1,$card2);  
  57.   
  58. echo 'card1 is ',printCard($card1),'
    '
    ;  
  59. echo 'card2 is ',printCard($card2),'
    '
    ;  
  60. $str = 'card1 equit card2';  
  61. if($result == 1) $str =  'card1 is larger than card2';  
  62. elseif($result == -1) $str = 'card1 is smaller than card2';  
  63. echo $str;  
  64.   
  65.   
  66. function printCard($card)  
  67. {  
  68.     $str = '(';  
  69.     foreach($card as $v){  
  70.         $str .= $v[0].$v[1].',';  
  71.     }  
  72.     return trim($str,',').')';  
  73. }  
<?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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板