问题补充说明:13张麻将技巧口诀... 13张麻将技巧口诀 展开
先大致介绍一下没两跳素乎束盐麻将规则:
各地的麻将有各自的特色,规则上有许多差异。
麻将牌有条子、筒360问答子、万子,分别从1到9各4张。
一条、二条、...九条
一筒、二筒、...九筒
一万、二万、...九万
"东南西北散担老对被云这怕织中发白"字牌各4张
有的麻将还有花牌"春夏秋冬梅兰步秋衣今就还粮门止竹菊"各1张
共计144张牌。
玩家有一手牌3n+1张(n为0,1,2...)。根据13张麻将和16张麻将的玩法n的上限不同,分别为4和5。一医牛酸当调吧需手牌再加上别家打出的一张牌或者自己摸进的一张牌,组成3n+2张牌可以判断是否胡牌。
基本牌型分为刻、顺、杠、将。
刻是3张同样的牌。
顺是3张同一花色连持室画坏略小顺卷走体烟号的条子、筒子或万子。
将是2张同样的牌。
杠是4张同样的牌(由于杠牌时会补一张牌,所以玩家手牌数量仍执待谈维销菜慢然是3n+1张)
吃牌、碰牌、杠牌
吃牌是取上家打出的牌和自己的牌组成顺。
碰牌是取别家打出的牌乡抗问掌见和自己的牌组成刻。
杠牌是取别家想远通行迅供打出的牌或者自己摸到的牌和自己的牌组成杠。
吃碰的玩家不摸牌,但仍然需要打出一张。
杠牌的玩好制给船数皮印家需要补一张牌,并仍然需要打出一张。
麻师起过苏威原甚非传将一般4人围成一桌,分为东南西北四家,轮流做庄。游戏开始各自初始拿到一样数目的牌(13张麻将拿13张,16张麻将拿16张)。从上局赢家开始摸牌,摸一张牌打一张牌。只有下家可以吃上家打出的牌,任何玩家都可以碰(或者杠)其他玩家打出的牌。
在游戏中,玩家需要想办法使得牌型成为某一种胡牌的类型。
要胡牌,一般需要配成一将搭配仍问度友侵深若干个刻或者顺。(故析你雨调请价语也有其他特殊类型的胡牌,不同类型胡牌有翻(或者台)的累积。翻数越高,赢得越多)
百搭麻将是一种有趣的变种。许多麻将玩法中都有百搭牌的玩法。游戏开始时一般通过骰子确定某张牌是百搭牌。百搭牌可以根据需要替代任何牌参与组合。但百搭牌不允许被打出。
现在需要大家写一个函数判断玩家否满足胡牌条件。
为了简化判断,牌只出现条子、筒子、万子和字牌。并且牌数保证是3n+2张(手牌+1张牌),其中0<=n<=5。预先吃、碰、杠的牌均不需要考虑。胡牌只判断3问家深肥矛坐述n+2张牌是否满足一将搭配若干个刻或者顺。不需要计雨树娘触打三算翻(或者台数)。当有3张或4张百搭牌时,也直接算船正条专括胡。
并且规定:
条子是0x01到0x09
筒子是0x11到0x19
万子是0x21到0x29
东南西北分别是0x30,0x40,0x50,0x60
中发白分别是0x70,0x80,0x90
百搭牌是0x00
当牌A被选择为百搭牌时,白板(普十按一注头齐负销0x90)就转为代替A牌。可以参与刻、顺、将的组合。注意怎留探受半则叶移岩征脸白板本身也可能会被选中为百搭牌。调用时,白板已经被转为百搭牌本身的牌,所以除非白板本身是百搭,否则参数中不会出现0x90。
boolTestHu(constcharpai[],intcount,charbaida);
pai数组内保存了count个牌(已经按编码由小到大排序)
TestHu函数需要返回true表示牌型可以胡牌。否则返回false
baida是被选中的百搭牌。
下面举几个例子:
0x00,0x01,0x02,0x03,0x30,baida=0x40,胡牌,顺+将,百搭配将
0x00,0x11,baida=0x11,胡牌,将,百搭归位(它配为它本身的牌,注意这里的0x10其实本来是白板)
0x01,0x02,0x03,0x04,0x05,baida=0x50,不胡,无百搭
0x01,0x02,0x03,0x04,0x04,baida=0x50,胡,无百搭,顺+将
0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,baida=0x50,胡,刻+顺+将(其实此时有许多种搭配都可以)
0x00,0x00,0x00,0x00,0x01,0x12,0x23,0x60,baida=0x50,胡,4百搭
标签:口诀,麻将