牛牛的比牌规则为:
单牌比较: k>q>j>10>9>8>7>6>5>4>3>2>a。
花色比较:黑桃>红桃>梅花>方块。牌型比较:无牛<有牛<牛牛<银牛<金牛<炸弹<五小牛。无牛牌型比较:取其中最大的一张牌比较大小,牌大的赢,大小相同比花色。有牛牌型比较:比牛数;牛数相同庄吃闲。牛牛牌型比较:取其中最大的一张牌比较大小,牌大的赢,大小相同比花色。银牛牌型比较:取其中最大的一张牌比较大小,牌大的赢,大小相同比花色。金牛牌型比较:取其中最大的一张牌比较大小,牌大的赢,大小相同比花色。炸弹之间大小比较:取炸弹牌比较大小。五小牛牌型比较:庄吃闲。五小牛>炸弹>金牛>银牛>牛牛>有牛>没牛
与之前赢三张比牌的思路一样,也是分为相同牌型和不同牌型两种情况考虑,若不同牌型则能很快的返回输赢状况,否则分别根据不同的判定规则进行相关处理。
比较单牌时我们可以通过之前排序的 compByCardsValue函数,不过注意这个函数当前者小于后者返回的是true。
- --banker_Cards 庄家
- --other_Cards 闲家
- --return 庄家是否赢
- function cardTool.bankeriswin(banker_Cards, other_Cards)
- local banker_Cards_Type = cardTool.getTypebyCards(banker_Cards)
- local other_Cards_Type = cardTool.getTypebyCards(other_Cards)
- if banker_Cards_Type ~= other_Cards_Type then
- return banker_Cards_Type>other_Cards_Type
- end
- if banker_Cards_Type ==CardType.SMALL_NIU then
- return true
- end
- if banker_Cards_Type ==CardType.BOMB then
- return banker_Cards[3].card_value > other_Cards[3].card_value
- end
- if banker_Cards_Type ==CardType.GOLD_NIU then
- return compByCardsValue(other_Cards[5],banker_Cards[5])
- end
- if banker_Cards_Type ==CardType.SILVER_NIU then
- return compByCardsValue(other_Cards[5],banker_Cards[5])
- end
- if banker_Cards_Type ==CardType.NIU_NIU then
- return compByCardsValue(other_Cards[5],banker_Cards[5])
- end
- if banker_Cards_Type ==CardType.NOT_NIU then
- return compByCardsValue(other_Cards[5],banker_Cards[5])
- end
- return true
- end
再写出完整测试代码:
- require"cardvalue"
- local cardTool=require"cardtool"
- require"print_t"
- local tabletool = require "tabletool"
- local luabit = require"bit"
- local cardBuffer =cardTool.RandCardList()
- --[[
- cardBuffer[1]=2
- cardBuffer[2]=4+16
- cardBuffer[3]=6
- cardBuffer[4]=10+16
- cardBuffer[5]=12+32
- cardBuffer[6]=6+48
- cardBuffer[7]=7+16
- cardBuffer[8]=9
- cardBuffer[9]=10+32
- cardBuffer[10]=12+48
- ]]
- local cards1={}
- local cards2={}
- for i=1,10,1 do
- local cardColor = luabit.band(cardBuffer[i] , 0xF0)/16+1
- local cardValue = luabit.band(cardBuffer[i] , 0x0F)
- local cardCount = cardTool.getCountbyValue(cardValue)
- local cardinfo =
- {
- card_value = cardValue,
- card_color = cardColor,
- card_count = cardCount,
- }
- if i >5 then
- cards2[i-5] = cardinfo
- else
- cards1[i] = cardinfo
- end
- end
- --print_t(cards1)
- --print_t(cards2)
- --print_t(cardTool.getCardNamebyCards(cards1))
- --print_t(cardTool.getCardNamebyCards(cards2))
- print_t(cardTool.getCardTypeNamebyType(cardTool.getTypebyCards(cards1)))
- print_t(cardTool.getCardNamebyCards(cards1))
- print_t(cardTool.getCardTypeNamebyType(cardTool.getTypebyCards(cards2)))
- print_t(cardTool.getCardNamebyCards(cards2))
- print_t(cardTool.bankeriswin(cards1,cards2))
输出:
- 牛一
- 方块1黑桃2梅花3方块5红桃K
- 没牛
- 黑桃4黑桃5黑桃8梅花9红桃J
- true
ps print_t为我自己写的可以输出table类型的方法