美文网首页
麻将的牌值算法

麻将的牌值算法

作者: Jey | 来源:发表于2020-01-06 11:55 被阅读0次

    麻将牌值的算法有很多方法,主要看前后端的统一,这里我采用了一种比较程序的算法,一看就懂。

    牌对应的十进制牌值,服务器发送16进制的牌值,我们读取到的是十进制的数值,下面是16进制和十进制的对应表:

    万:1- 9
    筒:17 - 25
    条:33 - 41 
    东南西北:49 - 52
    中发白:65 - 67
    
    local arr = {
           0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,   //1 - 9 万
           0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,   //1 - 9 筒
       0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,   //1 - 9 条
       0x31, 0x32, 0x33, 0x34,      //东西南北
       0x41, 0x42, 0x43
    }
    
    type:
    万:0
    筒:1
    条:2  
    东南西北:3
    中发白:4
    

    现在定义好了牌值规则,接下来就是算牌型和牌值了
    这里涉及到了运算符的 & 和 >> 运算

    local cardType = (value & 0xF0) >> 4
    local cardValue = (value & 0x0F)
    

    先看牌型:

    0x11二进制是 0001 0001
    0xF0二进制是 1111 0000
    &运算后            0001 0000
    右移4位            0000 0001
    
    得到的值(十进制)是:1 
    对应的type是筒
    以此类推0x01 - 0x09 得到的type是:0
    以此类推0x11 - 0x19 得到的type是:1
    以此类推0x21 - 0x29 得到的type是:2
    

    牌值:

    0x11二进制是 0001 0001
    0x0F二进制是 0000 1111
    &运算后            0000 0001
    
    根据上面0x11算出的牌型是:1(筒)
    那就知道了0x11是:0000 0001筒
    转成10进制就是:1筒
    
    0x15二进制是 0001 0101
    0x0F二进制是 0000 1111
    &运算后            0000 0101
    转成十进制是:5
    0x15是:5筒
    

    相关文章

      网友评论

          本文标题:麻将的牌值算法

          本文链接:https://www.haomeiwen.com/subject/lvnhactx.html