此前,在公司的專案開發中,我負責著手解決這樣乙個問題:在鬥地主遊戲中,根據玩家出的***出這手牌的牌型。
火箭:即雙王(大王和小王)。
炸彈:四張同數值牌(如四個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提出,後來我作了些小小改動,不知有沒有作相同問題研究的朋友,如果有更好的方法可以判斷,請不吝賜教。
乙個有關撲克牌牌型分析的問題
此前,在公司的專案開發中,我負責著手解決這樣乙個問題 在鬥地主遊戲中,根據玩家出的 出這手牌的牌型。火箭 即雙王 大王和小王 炸彈 四張同數值牌 如四個7 單牌 單個牌 如紅桃5 對牌 數值相同的兩張牌 如梅花4 方塊4 三張牌 數值相同的三張牌 如三個j 三帶一 數值相同的三張牌 一張單牌或一對牌...
乙個有關撲克牌牌型分析的問題
此前,在公司的專案開發中,我負責著手解決這樣乙個問題 在鬥地主遊戲中,根據玩家出的 出這手牌的牌型。火箭 即雙王 大王和小王 炸彈 四張同數值牌 如四個7 單牌 單個牌 如紅桃5 對牌 數值相同的兩張牌 如梅花4 方塊4 三張牌 數值相同的三張牌 如三個j 三帶一 數值相同的三張牌 一張單牌或一對牌...
作業04 乙個簡單的撲克牌遊戲
程式設計要求 設計乙個card類來表示單張撲克牌的邏輯模型。如下類圖所示。設計乙個deck類用來表示一副52張的撲克牌,公有介面必須包括生成撲克牌 顯示撲克牌 洗牌等這樣的成員函式。如下類圖所示。程式主函式如下 int main char face 15 3 class card card card...