麻將胡牌演算法 C

2021-08-29 16:18:26 字數 1693 閱讀 3012

這裡只介紹普通的麻將胡牌演算法,也就是7個對子或者 1個對子+3*n; n = 三個順子或者三個一樣的 ,其中字牌(東南西北中發白)不能算順子。

首先對於每張牌 它有牌的的數字 1-9,牌的種類 (萬條筒以及字)

所以先封裝乙個牌的包裝類。如果要和伺服器互動的話就應該給這個類序列化 即加上system.serializable,然後再轉json格式,這裡只做胡牌的基本判斷。

public class card

set

}private int type;

public int type

set

}public card(int n, int t)

}

首先對於一副牌應該先判斷是否滿足七對。不滿足則向下判斷。對於手牌會建立乙個交錯陣列來保管。即

int handcards = new int[4] , new int ,

new int , new int };

每個陣列的第一位(handcards[i][0])用來儲存當前型別牌的總數。

對應每種型別首先分為是否包含乙個對子或者不包含對子。

所以對於四種型別應該是只有一種包含乙個對子其他不包含對子。

**如下:

//type為0,1,2,3則為萬條筒字

class program

static void main(string args)

;console.writeline(ishu(cs));

}public static bool ishu(card cards)

else

}if (count == 7)

}int handcards = new int[4] , new int ,

new int , new int };

for (int i = 0; i < cards.length; i++)

}bool isjiang = false; //判斷是否有對子

int jiangnumber = -1;

for (int i = 0; i < handcards.getlength(0); i++)

isjiang = true;

jiangnumber = i;

}//因為對應四種牌型只能有一種且僅包含乙個對子

}//先求沒有將牌的情況判斷其是不是都是由刻子或者砍組成

for (int i = 0; i < handcards.getlength(0); i++)}}

bool success = false;

//有將牌的情況下

for (int i = 1; i <= 9; i++)

else}}

return success;

}//判斷是否滿足牌組為順子或砍組成

public static bool iskanorshun(int arr, bool iszi)

int index = -1;

for (int i = 1; i < arr.length; i++)

}bool result;

//是否滿足全是砍

if (arr[index] >= 3)

//是否滿足為順子

if (!iszi)

}return false;

}}

麻將胡牌演算法

majiang algorithm是帶多張鬼牌的通用胡牌演算法,採用查表方式,簡單高效。在生成表的階段,時間是不值錢的,所以生成方法我們可以任意窮舉。首先分為普通 風 箭三張表。窮舉出所有的key,比如普通表,就是000000000 444420000,因為每一種牌最大4張,且總和不超過14張牌。對...

麻將胡牌判決

胡牌有以下幾種情況 1 乙個對子 4組 3個相同的牌或者順子。只有m s p是可以構成順子的。東西南北這樣的牌沒有順子。2 7個不同的對子。3 1m,9m,1p,9p,1s,9s,1c,2c,3c,4c,5c,6c,7c.這13種牌每種都有,而且僅有這13種牌。肯定是有一種2張。其他的1張。首先是列...

麻將胡牌判決

就是給了13張牌。問增加哪些牌可以胡牌。胡牌有以下幾種情況 1 乙個對子 4組 3個相同的牌或者順子。只有m s p是可以構成順子的。東西南北這樣的牌沒有順子。2 7個不同的對子。3 1m,9m,1p,9p,1s,9s,1c,2c,3c,4c,5c,6c,7c.這13種牌每種都有,而且僅有這13種牌...