游戏规则 包含:

  • 4人模式

  • 4人分为转蛋,

  • 转蛋场次:不可升级,一直打2。

  1. 打牌规则

  • 非炸的牌型最多一次打出6张,顺子最多5张;

  • 炸弹牌型最多一次打出8张相同的牌(含级牌)。

  • 比赛场中的6个头以上炸弹 积分翻倍

  1. 牌型:

  • 单牌:单张牌;

  • 对牌:牌点相同的两张牌;

  • 三张牌:牌点相同的三张牌;

  • 三带二:牌点相同的三张牌加一对牌;

  • 三连对:三对连续对牌,不可超过3对,不分花色;

  • 钢板:两个连续三张牌,不可超过2个;

  • 顺子:五张连续单牌,不可超过五张;最大到A,AKQJ10>KQJ109>5432A

  • 同花顺:相同花色的连续五张牌;

  • 级牌可以参与顺子、同花顺,参与时按最大的替代点数来计算判定。

  • 如3是级牌,与KQJ10组成同花顺 或 顺子。按A来计算。

  • 炸弹:四张及以上相同牌点的牌;

  • 四王炸:四张王,最大的牌型;

  1. 级牌

  • 级牌可从2升级到A,当前打的对应级数的红桃为级牌。

  • 级牌为百搭牌,可以任意组合,除大王、小王;

  • 级牌具有特殊标志。

  • 当某方打自己的级数时,对应数字下方显示进行中的标记

  1. 牌型大小

  • 牌型大小依次为:大王、小王、级牌、A、K、...3、2;

  • 四王炸>六张和六张以上的炸弹>同花顺>五张炸弹>四张炸弹>其他牌型

  • 相同张数的非王炸,根据点数决定大小

  • 非炸弹的牌型根据点数决定大小

  • 顺子:根据最大单张判断大小

  • 钢板:根据最大三张的点数判断大小

  • 三连对:根据最大二张的点数判断大小

  • 三带二:最大三张的点数判断大小

  • 三张:根据点数判断大小

  • 对子:根据点数判断大小

  • 单张:根据点数判断大小

上传了一个视频,在youtube上,

https://www.youtube.com/watch?v=sxOn3RSiGqc

https://www.bilibili.com/video/BV1J24y1q78D/?vd_source=5e6d8ce5f3a8a9e501e1b4eb10b03c52

用户贡牌的部分逻辑代码,仅供参考

//构造数据
    CMD_S_GongCard GongCard;
    GongCard.wCurrentUser = m_wCurrentUser;
    BYTE you1 = m_cbEndPaiMing2[0];
    BYTE you2 = m_cbEndPaiMing2[1];
    BYTE you3 = m_cbEndPaiMing2[2];
    BYTE you4 = m_cbEndPaiMing2[3];
    if (cbstatic == JINGONG) //进贡
    {  
        m_cbGongCard[wChairID] = cbCardData;

        //两家上贡都完事了
        bool overGong = (m_cbGongCard[you3] != 0 && m_cbGongCard[you4] != 0);
        bool sameValue = (m_GameLogic.GetCardLogicValue(m_cbGongCard[you3]) == m_GameLogic.GetCardLogicValue(m_cbGongCard[you4]));
        bool sameColor = (m_GameLogic.GetCardColor(m_cbGongCard[you3]) == m_GameLogic.GetCardColor(m_cbGongCard[you4]));

        if (m_cbGong == SHUANG)//双下
        {
            
            if (overGong)
            {
                //if (sameValue && (!sameColor))
                if (false)  //先不让选贡了
                {

                    //如果两家牌值相同,花色不相同,给大游选贡
                    m_cbGongstatic = XUANGONG;
                    GongCard.cbstatic = m_cbGongstatic;
                    CopyMemory(GongCard.cbGongCard, m_cbGongCard, sizeof(m_cbGongCard));
                    CopyMemory(GongCard.lPaiHangChair, m_cbEndPaiMing, sizeof(m_cbEndPaiMing));

                    m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_GONG_CARD, &GongCard, sizeof(GongCard));
                }
                else
                {
                    // 大游拿走最大的那一张
                    if (m_GameLogic.GetCardLogicValue(m_cbGongCard[you3]) >= m_GameLogic.GetCardLogicValue(m_cbGongCard[you4]))
                    {
                        
                        m_cbGongUser[you1] = you3;
                        m_cbGongUser[you2] = you4;
                        m_cbGongUser[you3] = you1;
                        m_cbGongUser[you4] = you2;
                        

                    }
                    else
                    {
                        m_cbGongUser[you1] = you4;
                        m_cbGongUser[you2] = you3;
                        m_cbGongUser[you3] = you2;
                        m_cbGongUser[you4] = you1;

                    }
                    m_cbGongstatic = HUANGONG; //进贡完,下一步是 还贡
                    GongCard.cbstatic = m_cbGongstatic;
                    CopyMemory(GongCard.cbGongCard, m_cbGongCard, sizeof(m_cbGongCard));
                    CopyMemory(GongCard.cbGongUser, m_cbGongUser, sizeof(m_cbGongUser));

                    CopyMemory(GongCard.lPaiHangChair, m_cbEndPaiMing, sizeof(m_cbEndPaiMing));
                    m_pITableFrame->SendTableData(INVALID_CHAIR, SUB_S_GONG_CARD, &GongCard, sizeof(GongCard));
                }
            }
        }
        else
Logo

这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!

更多推荐