外贸网站怎么找客户,做ppt模板下载网站,网站 php 源码,网络推广培训机构哪个比较好近期回归程序行业#xff0c;由于业务需求需要做十三水游戏#xff0c;什么是十三水就不在多讲#xff0c;下面是判断十三水牌型的方法#xff08;带大小王#xff09;
GetSSSPaiType {};
local this GetSSSPaiType;
local huaseTable {};
local numTable {};
functi…近期回归程序行业由于业务需求需要做十三水游戏什么是十三水就不在多讲下面是判断十三水牌型的方法带大小王
GetSSSPaiType {};
local this GetSSSPaiType;
local huaseTable {};
local numTable {};
function GetSSSPaiType.Gtetype(cardList)--首先清空数组huaseTable {};numTable {};--格式化牌for i,card in ipairs(cardList) dolocal num,huase GetPokerHasJoker(card)table.insert(huaseTable,huase);table.insert(numTable,num);end--获取是第几墩牌需要判断if(#cardList3)then --是头道 只判断是三条顺子或者散牌 头道只需要判断是三条还是对子return SSSPaiData[this.GtetSanZhangype(numTable)].imageName;elseif (#cardList5)thenreturn SSSPaiData[this.GtetWuZhangType(huaseTable,numTable)].imageName;elsereturn SSSPaiData[SSSPaiType.Error].imageName; --数组越界 returnend
end
function GetSSSPaiType.GtetSanZhangype(cards) --判断头道是否三条if cards[1] cards[2] and cards[1]cards[3]then --是三条return SSSPaiType.SanTiao;elseif cards[1] cards[2] or cards[1] cards[3] or cards[3] cards[2] then --是对子return SSSPaiType.DuiZi;else --是散牌return SSSPaiType.SanPai;endend
end
--牌大小优先级 五同同花顺炸弹葫芦同花顺子三条两对对子散牌
function GetSSSPaiType.GtetWuZhangType(huaNums,dianNums) --五张牌需要两个参数 花色和点数if(table.ContainsValue(dianNums,0))then --带王 特殊判断table.RemoveValue(dianNums, 0) --首先吧王移除 table.RemoveValue(huaNums, 5) --花色也需要移除if (table.ContainsValue(dianNums,0))then --再次判断是否有王 防止有两个王 --有两个王table.RemoveValue(dianNums, 0) --有两个王再次移除掉王table.RemoveValue(huaNums, 5) --花色也需要移除if(this.isWuTongHasTwoJoker(dianNums))then --两个王 是五同return SSSPaiType.WuTong;elseif(this.isTongHuaHasTwoJoker(huaNums) and this.isShunZi(dianNums) and table.getrepeat(dianNums)3)then --同花顺return SSSPaiType.TongHuaShun;elseif(this.isTeShuShunZiHasTwoJoker(dianNums) and this.isTongHuaHasTwoJoker(dianNums)) then --特殊同花顺return SSSPaiType.ShunZi;elseif(this.isZhaDanHasTwoJoker(dianNums))then --是炸弹return SSSPaiType.ZhaDan;elseif(this.isTongHuaHasTwoJoker(dianNums))then --同花return SSSPaiType.TongHua;elseif(this.isShunZi(dianNums))then --顺子return SSSPaiType.ShunZi;elseif(this.isTeShuShunZiHasTwoJoker(dianNums))then --特殊顺子return SSSPaiType.ShunZi;elsereturn SSSPaiType.SanTiao; --有两个王 最次也是个三条 不能是葫芦endelse --只有一个王if(this.isWuTongHasOneJoker(dianNums))then --一个王 是五同return SSSPaiType.WuTong;elseif (this.isTongHuaHasOneJoker(huaNums) and this.isShunZi(dianNums) and table.getrepeat(dianNums)4)then --是同花顺return SSSPaiType.TongHuaShun;elseif(this.isTeShuShunZiHasOneJoker(dianNums)and this.isTongHuaHasOneJoker(huaNums))then --特殊同花顺return SSSPaiType.TongHuaShun;elseif(this.isZhaDanHasOneJoker(dianNums))then --是炸弹return SSSPaiType.ZhaDan; elseif(this.isHuLuHasOneJoker(dianNums))then --是葫芦return SSSPaiType.HuLu; elseif(this.isTongHuaHasOneJoker(huaNums) and not this.isShunZi(dianNums))then --是同花 但不是顺子return SSSPaiType.TongHua;elseif(this.isShunZi(dianNums) and not this.isTongHuaHasOneJoker(huaNums) and table.getrepeat(dianNums)4)then --是顺子 但不同花return SSSPaiType.ShunZi;elseif(this.isTeShuShunZiHasOneJoker(dianNums)and not this.isTongHuaHasOneJoker(huaNums))then --特殊顺子 但不是同花return SSSPaiType.ShunZi;elseif(this.isSnaTiaoHasOneJoker(dianNums))then --是三条return SSSPaiType.SanTiao; elseif(this.isLiangDuiHasOneJoker(dianNums))then --是两对return SSSPaiType.LiangDui; elsereturn SSSPaiType.DuiZi; --有一个王 最低也是个对子endendelse --不带王 直接判断if(this.isWuTong(dianNums))then --是五同return SSSPaiType.WuTong;elseif(this.isShunZi(dianNums) and this.isTongHua(huaNums))then --是同花顺return SSSPaiType.TongHuaShun;elseif(this.isTeShuShunZi(dianNums) and this.isTongHua(huaNums))then --特殊同花顺return SSSPaiType.ShunZi;elseif(this.isZhaDan(dianNums))then --炸弹return SSSPaiType.ZhaDan;elseif(this.isHuLu(dianNums)) then --是葫芦return SSSPaiType.HuLu;elseif(this.isTongHua(huaNums))then --是同花return SSSPaiType.TongHua;elseif(this.isShunZi(dianNums) and table.getrepeat(dianNums)5)then --只有连续的数才是顺子 不能有重复的 return SSSPaiType.ShunZi;elseif(this.isTeShuShunZi(dianNums))then --12345也是顺子return SSSPaiType.ShunZi;elseif(this.isSanTiao(dianNums))then --是三条return SSSPaiType.SanTiao;elseif(this.isLiangDui(dianNums))then --是两对return SSSPaiType.LiangDui;elseif(this.isDuiZi(dianNums))then --不对子return SSSPaiType.DuiZi;elsereturn SSSPaiType.SanPai;endendend
--判断是否顺子 带王
function GetSSSPaiType.isShunZi(paiNums)local n #paiNums--计算0的数量local joker 0for i1,n doif paiNums[i] 0 thenjoker joker 1endend--排序local sortt function(a, b)return a bendtable.sort(paiNums,sortt)local pre paiNums[1]--计算总的补充数量local x 0for i2,n dolocal tx paiNums[i] - prex x tx - 1pre paiNums[i]end--如果x比0的数量少那么可以将数列补充成连续的if x joker then --是顺子return true;else--不是顺子return false;end
end
--12345也是顺子 特殊判断
function GetSSSPaiType.isTeShuShunZi(paiNums)local teshu {2,3,4,5,14};table.sort(paiNums)if(table.isEquation(teshu,paiNums))thenreturn true;elsereturn false;end
end
--是否同花
function GetSSSPaiType.isTongHua(huaNums)if(huaNums[1]huaNums[2] and huaNums[1]huaNums[3] and huaNums[1]huaNums[3] and huaNums[1]huaNums[4] and huaNums[1]huaNums[5]) thenreturn true;elsereturn false;end
end
--是否五同
function GetSSSPaiType.isWuTong(paiNums)if(paiNums[1]paiNums[2] and paiNums[1]paiNums[3] and paiNums[1]paiNums[3] and paiNums[1]paiNums[4] and paiNums[1]paiNums[5]) thenreturn true;elsereturn false;endreturn false;
end
--判断是否葫芦
function GetSSSPaiType.isHuLu(paiNums)if paiNums[1] paiNums[2] and paiNums[1] paiNums[3] thenif paiNums[4] paiNums[5] thenreturn trueendendif paiNums[3] paiNums[4] and paiNums[3] paiNums[5] thenif paiNums[1] paiNums[2] thenreturn trueendendreturn false
end
--判断是否三条
function GetSSSPaiType.isSanTiao(paiNums)table.sort(paiNums)if(paiNums[1]paiNums[2]and paiNums[2]paiNums[3])then return true;elseif(paiNums[2]paiNums[3]and paiNums[3]paiNums[4])then return true;elseif(paiNums[3]paiNums[4]and paiNums[4]paiNums[5])then return true;elsereturn falseend
end
--判断是否炸弹
function GetSSSPaiType.isZhaDan(paiNums)table.sort(paiNums) --避免浪费性能 排序后单牌只会在1或者5if paiNums[1] paiNums[2] and paiNums[1] paiNums[3] and paiNums[1] paiNums[4] thenreturn trueelseif paiNums[2] paiNums[3] and paiNums[2] paiNums[4] and paiNums[2] paiNums[5] thenreturn trueelsereturn falseend
end
--判断是否两对
function GetSSSPaiType.isLiangDui(paiNums)table.sort(paiNums) --避免浪费性能 排序后单牌只会在1 3 5if paiNums[1] paiNums[2] and paiNums[4] paiNums[5] thenreturn trueelseif paiNums[2] paiNums[3] and paiNums[4] paiNums[5] thenreturn trueelseif paiNums[1] paiNums[2] and paiNums[2] paiNums[3] thenreturn trueelsereturn falseend
end
--判断是否是对子 没有王
function GetSSSPaiType.isDuiZi(paiNums)table.sort(paiNums)if(paiNums[1]paiNums[2] or paiNums[2]paiNums[3] or paiNums[3]paiNums[4] or paiNums[4]paiNums[5])then return trueelsereturn falseend
end
-------------------------有一个王判断-------------------------
--判断是否五同 有一个王
function GetSSSPaiType.isWuTongHasOneJoker(paiNums)if (paiNums[1]paiNums[2] and paiNums[1]paiNums[3] and paiNums[1]paiNums[4])thenreturn trueelsereturn falseend
end
--判断是否同花 有一个王
function GetSSSPaiType.isTongHuaHasOneJoker(huaNums)if(huaNums[1]huaNums[2] and huaNums[1]huaNums[3] and huaNums[1]huaNums[4])thenreturn trueelsereturn falseend
end
--判断是否特殊顺子 有一个王 就是和王能组成A2345的顺子
function GetSSSPaiType.isTeShuShunZiHasOneJoker(paiNums)table.sort(paiNums) --首先吧自己的手牌格式化local teshu1 {2,3,4,5};local teshu2 {3,4,5,14};local teshu3 {2,4,5,14};local teshu4 {2,3,5,14};local teshu5 {2,3,4,14};if(table.isEquation(teshu1,paiNums) or table.isEquation(teshu2,paiNums) or table.isEquation(teshu3,paiNums) or table.isEquation(teshu4,paiNums) or table.isEquation(teshu5,paiNums))thenreturn true;elsereturn false;end
end
--判断是否是炸弹 有一个王
function GetSSSPaiType.isZhaDanHasOneJoker(paiNums)table.sort(paiNums) --格式化牌 让散牌在1或者4if(paiNums[1]paiNums[2] and paiNums[1]paiNums[3])then return true;elseif(paiNums[2]paiNums[3] and paiNums[2]paiNums[4])then return true;elsereturn false;end
end
--判断是否是葫芦 有一个王
function GetSSSPaiType.isHuLuHasOneJoker(paiNums)table.sort(paiNums)if(paiNums[1]paiNums[2] and paiNums[3] paiNums[4])then return true;elsereturn false;end
end
--判断是否三条 有一个王
function GetSSSPaiType.isSnaTiaoHasOneJoker(paiNums)table.sort(paiNums)if paiNums[1] paiNums[2] or paiNums[2] paiNums[3] or paiNums[3]paiNums[4] thenreturn trueelsereturn falseend
end
--判断是否两对 有一个王
function GetSSSPaiType.isLiangDuiHasOneJoker(paiNums)table.sort(paiNums)if(paiNums[1]paiNums[2] or paiNums[2]paiNums[3] or paiNums[3]paiNums[4])then return trueelsereturn falseend
end
-------------------------有两个王判断-------------------------
--判断是否五同
function GetSSSPaiType.isWuTongHasTwoJoker(paiNums)if(paiNums[1] paiNums[2] and paiNums[1] paiNums[3])then return true;elsereturn false;end
end
--判断是否同花
function GetSSSPaiType.isTongHuaHasTwoJoker(huaNums)if(huaNums[1] huaNums[2] and huaNums[1] huaNums[3])then return true;elsereturn false;end
end
--判断是否炸弹
function GetSSSPaiType.isZhaDanHasTwoJoker(paiNums)table.sort(paiNums)if(paiNums[1] paiNums[2] or paiNums[2] paiNums[3])then return true;elsereturn false;end
end
--特殊顺子 就是和王能组成A2345的顺子
function GetSSSPaiType.isTeShuShunZiHasTwoJoker(paiNums)table.sort(paiNums)local teshu1 {2,3,14};local teshu2 {2,4,14};local teshu3 {2,5,14};local teshu4 {3,4,14};local teshu5 {3,5,14};local teshu6 {2,3,4};local teshu7 {2,3,5};local teshu8 {2,4,5};local teshu9 {3,4,5};if(table.isEquation(teshu1,paiNums) or table.isEquation(teshu2,paiNums) or table.isEquation(teshu3,paiNums) or table.isEquation(teshu4,paiNums) or table.isEquation(teshu5,paiNums) or table.isEquation(teshu6,paiNums) or table.isEquation(teshu7,paiNums) or table.isEquation(teshu8,paiNums) or table.isEquation(teshu9,paiNums))thenreturn true;elsereturn false;end
end使用时仅需调用GetSSSPaiType.Gtetype()即可牌类型如下
用到的牌型枚举
SSSPaiData {};
SSSPaiData[SSSPaiType.SanPai] {typeName 散牌,imageName sanpai};
SSSPaiData[SSSPaiType.DuiZi] {typeName 对子,imageName duizi};
SSSPaiData[SSSPaiType.LiangDui] {typeName 两对,imageName liangdui};
SSSPaiData[SSSPaiType.SanTiao] {typeName 三条,imageName santiao};
SSSPaiData[SSSPaiType.ShunZi] {typeName 顺子,imageName shunzi};
SSSPaiData[SSSPaiType.TongHua] {typeName 同花,imageName tonghua};
SSSPaiData[SSSPaiType.HuLu] {typeName 葫芦,imageName hulu};
SSSPaiData[SSSPaiType.ZhaDan] {typeName 炸弹,imageName zhadan};
SSSPaiData[SSSPaiType.TongHuaShun] {typeName 同花顺,imageName tonghuashun};
SSSPaiData[SSSPaiType.WuTong] {typeName 五同,imageName tiezhi};
SSSPaiData[SSSPaiType.Error] {typeName 错误,imageName error};
用到的公共方法可以放本类也可以放全局个人认为放全局会方便一点这样其他地方也可以使用全局进行调用
--切割牌 带王
function GetPokerHasJoker(pkId)local sets string.split(pkId, _);local color tonumber(sets[1]);local num tonumber(sets[2]);if(num 1) thennum 14;endif(color 5)then --如果是王 就吧点数当成0num 0;endreturn num, color;
end--判断value是否存在
--字典/数组
function table.ContainsValue(tb, val)if(type(tb) table) thenfor k, v in pairs(tb) doif equals(v, val) thenreturn true;endendelsereturn equals(tb, val);endreturn false;
end--删除字典中值
function table.RemoveValue(tb, val)for k, v in pairs(tb) doif(v val) thentable.remove(tb, k);return;endend
end--判断两个数组是否相等
function table.isEquation(tb1,tb2)if(#tb1~#tb2)thenreturn false;endfor i,v in pairs(tb1) doif tb1[i] ~ tb2[i]thenreturn false;endendreturn true;
end--检查表内相同元素个数
function table.getrepeat(t)local check {} local n {}for key, value in pairs(t) doif not check[value] thenn[key] valuecheck[value] valueendendreturn #n;
end
写在后面方法是临时拼凑可能会有bug我会持续修复直至修复完美