這裡只介紹普通的麻將胡牌演算法,也就是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種牌...