牛牛的比牌規則為:
單牌比較: 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張牌均勻分給給各位...