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

2021-09-07 18:41:50 字數 3495 閱讀 9682

牛牛的比牌規則為:

單牌比較: k>q>j>10>9>8>7>6>5>4>3>2>a。

花色比較:黑桃》紅桃》梅花》方塊。

牌型比較:無牛《有牛《牛牛《銀牛《金牛《炸彈《五小牛。

無牛牌型比較:取其中最大的一張牌比較大小,牌大的贏,大小相同比花色。

有牛牌型比較:比牛數;牛數相同莊吃閒。

牛牛牌型比較:取其中最大的一張牌比較大小,牌大的贏,大小相同比花色。

銀牛牌型比較:取其中最大的一張牌比較大小,牌大的贏,大小相同比花色。

金牛牌型比較:取其中最大的一張牌比較大小,牌大的贏,大小相同比花色。

炸彈之間大小比較:取炸彈牌比較大小。

五小牛牌型比較:莊吃閒。

五小牛》炸彈》金牛》銀牛》牛牛》有牛》沒牛

與之前贏三張比牌的思路一樣,也是分為相同牌型和不同牌型兩種情況考慮,若不同牌型則能很快的返回輸贏狀況,否則分別根據不同的判定規則進行相關處理。

比較單牌時我們可以通過之前排序的 compbycardsvalue函式,不過注意這個函式當前者小於後者返回的是true。

[plain]view plain

copy

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

再寫出完整測試**:

[plain]view plain

copy

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  

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))  

輸出:[plain]view plain

copy

牛一  

方塊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張牌均勻分給給各位...