lua 牛牛牌型處理相關演算法(下) 牌型比較

2021-08-01 14:06:29 字數 3160 閱讀 3891

牛牛的比牌規則為:

單牌比較: 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

endif banker_cards_type ==cardtype.small_niu then

return true

endif banker_cards_type ==cardtype.bomb then

return banker_cards[3].card_value > other_cards[3].card_value

endif banker_cards_type ==cardtype.gold_niu then

return compbycardsvalue(other_cards[5],banker_cards[5])

endif banker_cards_type ==cardtype.silver_niu then

return compbycardsvalue(other_cards[5],banker_cards[5])

endif banker_cards_type ==cardtype.niu_niu then

return compbycardsvalue(other_cards[5],banker_cards[5])

endif banker_cards_type ==cardtype.not_niu then

return compbycardsvalue(other_cards[5],banker_cards[5])

endreturn 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 =

if i >5 then

cards2[i-5] = cardinfo

else

cards1[i] = cardinfo

endend--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型別的方法 

lua 牛牛牌型處理相關演算法(下) 牌型比較

牛牛的比牌規則為 單牌比較 k q j 10 9 8 7 6 5 4 3 2 a。花色比較 黑桃 紅桃 梅花 方塊。牌型比較 無牛 有牛 牛牛 銀牛 金牛 炸彈 五小牛。無牛牌型比較 取其中最大的一張牌比較大小,牌大的贏,大小相同比花色。有牛牌型比較 比牛數 牛數相同莊吃閒。牛牛牌型比較 取其中最大...

lua 牛牛牌型處理相關演算法(上) 牌值資料

牛牛是一種簡單卻又非常有意思的棋牌遊戲,主要是採用一副撲克牌其中的52張 除去大小王 第一局的莊家是隨機產生,而後每局的莊家是上一輪遊戲中的贏家,每局遊戲系統自動洗牌後將5張牌均勻分給給各位玩家。玩家拿到牌後根據一定的遊戲規則進行排列組合,莊家和閒家依次進行大小比較從而決定勝負。牛牛的牌型比較裡考慮...

lua 牛牛牌型處理相關演算法(上) 牌值資料

這幾天又做了牛牛遊戲,在這裡把相關演算法寫一下,與前幾天寫的贏三張的基本類似,所以大家也可以參考前幾篇部落格。牛牛是一種簡單卻又非常有意思的棋牌遊戲,主要是採用一副撲克牌其中的52張 除去大小王 第一局的莊家是隨機產生,而後每局的莊家是上一輪遊戲中的贏家,每局遊戲系統自動洗牌後將5張牌均勻分給給各位...