游戏规则 包含:
4人模式
4人分为转蛋,
转蛋场次:不可升级,一直打2。
打牌规则
非炸的牌型最多一次打出6张,顺子最多5张;
炸弹牌型最多一次打出8张相同的牌(含级牌)。
比赛场中的6个头以上炸弹 积分翻倍
牌型:
单牌:单张牌;
对牌:牌点相同的两张牌;
三张牌:牌点相同的三张牌;
三带二:牌点相同的三张牌加一对牌;
三连对:三对连续对牌,不可超过3对,不分花色;
钢板:两个连续三张牌,不可超过2个;
顺子:五张连续单牌,不可超过五张;最大到A,AKQJ10>KQJ109>5432A
同花顺:相同花色的连续五张牌;
级牌可以参与顺子、同花顺,参与时按最大的替代点数来计算判定。
如3是级牌,与KQJ10组成同花顺 或 顺子。按A来计算。
炸弹:四张及以上相同牌点的牌;
四王炸:四张王,最大的牌型;
级牌
级牌可从2升级到A,当前打的对应级数的红桃为级牌。
级牌为百搭牌,可以任意组合,除大王、小王;
级牌具有特殊标志。
当某方打自己的级数时,对应数字下方显示进行中的标记
牌型大小
牌型大小依次为:大王、小王、级牌、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