1. 程式人生 > >紙牌遊戲扎金花的牌大小比較(PHP)

紙牌遊戲扎金花的牌大小比較(PHP)

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

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

好了,不廢話了。

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

思路:

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

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

    例外,對於對子要將對子的位數放在前兩位(後面會看到為什麼這麼做)。例如‘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。例如‘Spade K,Spade 6,Spade J':3131106

   因為順金的時候其實是金花和順子的和,所以順金應該是50*10000。 例如‘Spade 7,Spade 6,Spade 8':5080706

   對於筒子,將結果加上60*100000。例如’666‘:6060606,’JJJ‘:6111111

3“ 比較兩幅牌的大小(用所計算的分值來比較)

就這麼簡單!!

程式碼如下(PHP)

<?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)

還記得上初中的時候經常下午放學就躲在路邊扎金花來賭錢,貌似還上癮了,現在過年的時候還經常一起扎金花賭錢,但運氣不啥好,每次都是輸啊。 今天陽光明媚,由於清明節才出去玩了,所以今天沒有去哪。閒著沒事就想了下怎麼用程式實現金花中兩幅牌的大小比較,現在把它實現了,有些方法還是蠻重

棋牌平臺制作教程之php中的炸金花大小比較算法

算法 棋牌 PHP中紮金花比大小如何實現在棋牌遊戲中,不管是現實的還是線上的,炸金花無疑是最熱門棋牌遊戲之一,鄙人從小就酷愛炸金花,機緣巧合後面從事了IT行業,話不多說,直接進去正題吧。炸金花兩副牌的比較規則就不說了,註明一下是順子的時候 : JQK < A23 < QKA思路:炸金花下面

金花大小比較演算法(Java版)

注:以下演算法說明僅限一副牌(不包含大小王)的情況 1、扎金花規則說明(大家都懂的,這裡做簡單描述): 1)玩家每人3張牌; 2)牌面大小2、3、4、5、6、7、8、9、10(用T表示),J、Q、K、A,大小依次遞增; 3)牌的花色有黑桃(用H表示)、紅心(用X表示)、梅花(用

html5炸金花棋牌開發比較算法在php中的實現

reac ons tca mon sort data lar class arr PHP中紮金花比大小如何實現 在棋牌遊戲中,不管是現實的還是線上的,紮金花無疑是最熱門棋牌遊戲之一,鄙人從小就酷愛紮金花,機緣巧合後面從事了IT行業,話不多說,直接進去正題吧。 紮金花兩副牌的

鬥地主-比較大小演算法

先將牌轉化字串,牌和字元的對照如下 //牌和程式碼中字元的對應 //3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9, a:10, b:J, c:Q, d:K, e:A, f:2, g:王 看程式碼: //.h標頭檔案 #ifnd

金花絕對大小計算、比較及排序演算法(Java),包含花色參與和不參與大小比較

昨日忽生興趣,想起同事正在玩的一個炸金花遊戲,見他們討論略有激烈,想來蠻有趣,於是自己也寫來玩玩。 因有要一次產生很多副牌的需求(可能上1000),要對所有的玩家進行一個排序,因此考慮一個能得到每幅牌的絕對大小的統一演算法。 牌大小計算演算法

實現鬥地主紙牌遊戲---洗 看底牌的具體功能------Map集合存儲方法 遍歷的應用

num size 集合 public print lis dex 進行 class 該Demo只是鬥地主的遊戲的一部分,實現的鬥地主的組合牌 洗牌 發牌 看牌的功能,主要應用Map集合進行練習 package cn.lijun import java.util.Arra

tp 中 where條件,字段和字段的大小比較

比較 sta number time arr 大小 array art ring $map = array( ‘pid‘ => 0, ‘start_time‘ => ar

紙牌遊戲----小貓釣魚

fine 求解 str 判斷 amp 條件 class example #define 問題描述: 遊戲的規則是這樣的:將一副撲克牌平均分成兩份,每人拿一份。小哼先拿出手中的第一張撲克牌放在桌上,然後小哈也拿出手中的第一張撲克牌,並放在小哼剛打出的撲克牌的上面,就像這樣

bash的基礎特性 數值運算 數值大小比較 環境變量 位置變量 正則表達式

標準 實現 自動 面試 .... count 輸入 expr 都是 變量類型:數據存儲格式,儲存空間大小,參與變量種類字符型數值型:整數型浮點型強類型的:定義變量時必須指定變量類型,參與運算必須符合類型要求。弱類型的:定義變涼時無需指定類型,所有的全是字符型,參與運算會自動

牛客國慶集訓 紙牌遊戲 概率

i++ 紙牌遊戲 ron 遊戲 希望 font size 其中 代碼 一、題意 某個遊戲體系中共有N種卡牌,其中M種是稀有的。小貝每次和電腦對決獲勝之後都會有一個抽卡機會,這時系統會隨機從N種卡中選擇一張給小貝。普通卡可能多次出現,而稀有卡牌不會被重復抽到。小貝希望收集到

紙牌遊戲

題目描述 華華和秀秀在玩紙牌遊戲,遊戲的規則如下: 初始時,桌面上有n張紙牌,每張紙牌上寫有一個正整數。遊戲開始時華華先在黑板上寫上數字0,之後秀秀和華華輪流選取紙牌(秀秀先手)。當一個人選定一張紙牌時,他需要將黑板上的數字改寫成這個數和紙牌上的數的最大公約數,然後將這張紙牌丟棄。當

IPV 6 / IPV 4大小比較,判斷IPV6/IPV4範圍的開始和結束

IP 比較大小的目的是為了確認IP 範圍的正確性,前提是必須是同一網段的 原理:舉個IPV 4 的例子: 127.0.0.1 和 128.0.0.2 是不同的兩個網段,不同網段下邊的IP是無法對比大小的,因為互不通訊,互不影響。 只有在同一個網段的兩個 IP 才能比較大小,

Shell指令碼 字串大小比較 字串是否相等比較 字串是否為空判斷

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

每人都有兩大炸彈的金花2012

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

使用c#.net實現打地鼠遊戲和翻遊戲

***本程式通過vs2010建立窗體應用程式,通過控制元件建立記憶紙牌及打地鼠遊戲視窗 需求分析: 為了使用者給使用者提供美觀的遊戲介面,本專案在遊戲的開發實踐中注重對介面的美觀設計,並配有背景音樂,在打地鼠遊戲中將指標變為錘子,滿足玩家打地鼠的需求。 遊戲介面圖如下***

哈哈,金花,我的無敵版本,必勝程式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

1043:整數大小比較

時間限制: 1000 ms 記憶體限制: 65536 KB 提交數: 10998 通過數: 6509 【題目描述】 輸入兩個整數,比較它們的大小。若x>y,輸出>;若

演算法 -- 紙牌遊戲_小貓釣魚

  星期天小哼和小哈約在一起玩桌遊,他們正在玩一個非常古怪的撲克遊戲——“小貓釣魚”。遊戲的規則是這樣的:將一副撲克牌平均分成兩份,每人拿一份。小哼先拿出手中的第一張撲克牌放在桌上,然後小哈也拿出手中的第一張撲克牌,並放在小哼剛打出的撲克牌的上面,就像這樣兩人交替出牌。出牌時

【解決方案】關於IP地址字串拆分組裝,以及大小比較、範圍判斷

關於IP地址字串拆分組裝,以及大小比較、範圍判斷,比較不容易。 但是,我們知道IP地址,實際上是四組十六進位制的數字,這樣就簡單多了。 比如: 10.201.18.6–> 10->0A 20