紙牌遊戲扎金花的牌大小比較(PHP)
還記得上初中的時候經常下午放學就躲在路邊扎金花來賭錢,貌似還上癮了,現在過年的時候還經常一起扎金花賭錢,但運氣不啥好,每次都是輸啊。
今天陽光明媚,由於清明節才出去玩了,所以今天沒有去哪。閒著沒事就想了下怎麼用程式實現金花中兩幅牌的大小比較,現在把它實現了,有些方法還是蠻重要的,因此就記下來。
好了,不廢話了。
扎金花兩副牌的比較規則就不說了,註明一下是順子的時候 : JQK < A23 < QKA
思路:
1" 隨機生成兩幅牌,每副牌結構為
2” 計算每副牌的分值:每副牌有個原始大小(即排除對子,順子,金花,順金,筒子的大小),再array( array('Spade','K'), array('Club','6'), array('Spade','J'), )
每張牌的分值為一個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