乙個鬥地主的演算法

2021-04-02 18:48:19 字數 2009 閱讀 9285

此前,在公司的專案開發中,我負責著手解決這樣乙個問題:在鬥地主遊戲中,根據玩家出的***出這手牌的牌型。

火箭:即雙王(大王和小王)。

炸彈:四張同數值牌(如四個7)。

單牌:單個牌(如紅桃5)。

對牌:數值相同的兩張牌(如梅花4+方塊4)。

三張牌:數值相同的三張牌(如三個j)。

三帶一:數值相同的三張牌 + 一張單牌或一對牌。例如: 333+6或444+99

單順:五張或更多的連續單牌(如:45678或78910jqk)。不包括2點和雙王。

雙順:三對或更多的連續對牌(如:334455、7788991010jj)。不包括2點和雙王。

三順:二個或更多的連續三張牌(如:333444、555666777888)。不包括2點和雙王。

飛機帶翅膀:三順+同數量的單牌(或同數量的對牌)。

如:444555+79 或333444555+7799jj

四帶二:四張牌+兩手牌。(注意:四帶二不是炸彈)。

如:5555+3+8或4444+55+77。

那麼,如何由玩家出的***出這手牌到底是哪一種牌型呢?

在我們試著用程式解決這個問題之前,先來回顧一下在現實的生活中是如何分辨一手牌的牌型的。在鬥地主遊戲中,確定不同牌型的乙個重要依據是看這手牌中有多少張牌的數字是相同的。比如一手這樣的牌:梅花2+方塊3+紅桃3+黑桃3,在我們的思維中,首先會計算有最多相同數字的那些牌的個數,也就是這裡的三個 3,在這裡,3總計出現了3次。根據最多出現相同數字的情況,我們可以把一手牌先分成四種情況:

1、所有數字只出現一次

2、相同數字的牌出現兩次

3、相同數字的牌出現三次

4、相同數字的牌出現四次

5、不可能出現的情況:相同數字的牌出現大於四次或小於1次。

其中,在以上的1、2、3、4中又可能分為多種情況,比如在1中,雖然相同數字最多隻出現一次,但不能因此就斷定它是單張,它也有可能是雙王(這裡假定大小王的數字不相同)或單順;在2中,出現兩次的情況下,又進一步分為:對子和雙順兩種情況;在3中,出現三次的情況下,可能有以下牌型:單三張,三帶一,三順或飛機;在4中,出現4個相同數字牌的時候,可能有以下牌型:炸彈和四帶二。

為了建立以上的這種分析模型,我們需要對出的牌進行排序和統計,找出最大的相同個數及相同的數字,再進一步分析它的特徵直到最終確定當前牌的牌型。用於實現牌型分析偽過程如下:

注:cardlist為所出牌的列表,cardcount為所出牌的個數。二維陣列cardarray[0..12,0..1]是用於分析的輔助資料結構。

1、對cardlist按牌的數字大小進行公升序排序

2、對carlist中的每張牌順序進行以下操作

將cardlist中牌的數字記入cardarray的低維中,即首先記cardlist[0]的數字於cardarray[0,0]中,並將 cardarray[0,1]置為1,然後順序取出cardlist中的後繼牌,判斷後繼牌是否等於cardarray當前位置的cardarray [x,0]值,如果等於,則在card[x,1]中加1,以求得相同牌的個數,如果不等於,則在新單元cardarray[x+1,0]中記入 cardlist當前牌的數字,並把cardarray[x+1,1]置為1。如此迴圈,對cardlist中的每張牌都進行掃瞄後,cardarray 陣列中,低維存放的就是當前這手牌中出現的所有數字,而在其對應的高維中則存放這些數字出現的次數。由這個二維陣列,我們便可以初步判定這手牌的牌型。

這是我在實際工作中所採用的牌型分析方法,此方法最初由我們的teamleader提出,後來我作了些小小改動,不知有沒有作相同問題研究的朋友,如果有更好的方法可以判斷,請不吝賜教。

乙個由鬥地主引發的血案

王炸 看到這個小故事我也試著拿筆去算了算,唉,尼瑪,去試一下自己的智商下限 然後得出如下思路 地主20,農民17,一共54張牌.那我直接用 20 54 地主拿一張王牌的概率 19 53 地主在有一張王后再拿到王的概率 然後兩個概率相乘 20 54 19 53不就得出了王炸的概率嘛?13.3 在確定王...

鬥地主出牌演算法

根據鬥地主出牌規則.對玩家出的牌進行檢驗.判斷是否符合出牌規則.關於鬥地主的出牌規則網上有很多 思路 將玩家的牌按公升序排序.然後將牌進行拆分,分存在4個陣列中.拆分規則如下 假設有牌 333 444 555 789 則拆分後陣列中的資料如下 arr 0 345789 arr 1 345 arr 2...

鬥地主的規則 歡樂鬥地主的規則

鬥地主牌型 火箭 即雙王 大王和小王 最大的牌。四張同數值牌 如四個 7 單牌 單個牌 如紅桃 5 對牌 數值相同的兩張牌 如梅花 4 方塊 4 三張牌 數值相同的三張牌 如三個 j 三帶一 數值相同的三張牌 一張單牌或一對牌。例如 333 6 或 444 99 飛機帶翅膀 三順 同數量的單牌 或同...