手记

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 thenreturn banker_Cards_Type>other_Cards_Typeendif banker_Cards_Type ==CardType.SMALL_NIU thenreturn trueendif banker_Cards_Type ==CardType.BOMB thenreturn banker_Cards[3].card_value > other_Cards[3].card_valueendif banker_Cards_Type ==CardType.GOLD_NIU thenreturn compByCardsValue(other_Cards[5],banker_Cards[5])endif banker_Cards_Type ==CardType.SILVER_NIU thenreturn compByCardsValue(other_Cards[5],banker_Cards[5])endif banker_Cards_Type ==CardType.NIU_NIU thenreturn compByCardsValue(other_Cards[5],banker_Cards[5])endif banker_Cards_Type ==CardType.NOT_NIU thenreturn compByCardsValue(other_Cards[5],banker_Cards[5])endreturn trueend


再写出完整测试代码:


require"cardvalue"local cardTool=require"cardtool"require"print_t"local tabletool = require "tabletool"local luabit = require"bit"local cardBuffer =cardTool.RandCardList()--[[cardBuffer[1]=2cardBuffer[2]=4+16cardBuffer[3]=6cardBuffer[4]=10+16cardBuffer[5]=12+32cardBuffer[6]=6+48cardBuffer[7]=7+16cardBuffer[8]=9cardBuffer[9]=10+32cardBuffer[10]=12+48]]local cards1={}local cards2={}for i=1,10,1 dolocal cardColor = luabit.band(cardBuffer[i] , 0xF0)/16+1local 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 thencards2[i-5] = cardinfoelsecards1[i] = cardinfoendend--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红桃Jtrue



ps    print_t为我自己写的可以输出table类型的方法 


0人推荐
随时随地看视频
慕课网APP