lua——牛牛牌型处理相关算法(下)——牌型比较


牛牛的比牌规则为:

单牌比较: 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类型的方法 






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值