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

2021-08-01 14:02:04 字數 3550 閱讀 8221

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

牛牛的牌型比較裡考慮到了花色的大小,即:

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

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

同時不同的牌有乙個算「牛」的數值含義,k q j的數值是10,其他的等於自身數值。

所以為了方便計算,在定義牌資訊類裡面設三個引數,分別表示花色、牌值、數值

cardcolor =

cardvalue =

cardcount =

撲克的資料同樣採用16進製制雙位數,一位表示花色,一位表示牌值

--撲克資料

carddata=

g_cardscount = 52 --撲克數目

g_perplacardcount = 5 --每個玩家牌數

所以獲取單牌資訊的方法為:

local cardcolor = luabit.band(cardbuffer[i] , 0xf0)/16+1

local cardvalue = luabit.band(cardbuffer[i] , 0x0f)

local cardcount = cardtool.getcountbyvalue(cardvalue)

local cardinfo =

function cardtool.getcountbyvalue(value)

if value > 10 then

return 10

else

return value

endend

洗牌:

function cardtool.randcardlist()

local buffercount = #carddata;

local randcount = 1;

local position = 1;

math.randomseed(os.time())

for i = 1,#carddata do

local ranone = math.random(1,#carddata+1-i)

carddata[ranone], carddata[#carddata+1-i] = carddata[#carddata+1-i],carddata[ranone]

endlocal cardbuffer = tabletool.deepcopy(carddata);

return cardbuffer;

end

發牌:

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

兩個cards的資料為:

table: 0072b4f8 

[2] => table: 0072b4f8

[3] => table: 0072b4f8

[4] => table: 0072b4f8

[5] => table: 0072b4f8

}table: 0072b520

[2] => table: 0072b520

[3] => table: 0072b520

[4] => table: 0072b520

[5] => table: 0072b520

}

我們寫乙個牌的翻譯函式

function cardtool.getcardnamebycard(card)

local string=""

if card.card_color ==4 then

string=string.."黑桃"

elseif card.card_color ==3 then

string=string.."紅桃"

elseif card.card_color ==2 then

string=string.."梅花"

elseif card.card_color ==1 then

string=string.."方塊"

else

string="error"

endif card.card_value==13 then

string=string.."k"

elseif card.card_value==12 then

string=string.."q"

elseif card.card_value==11 then

string=string.."j"

else

string=string..card.card_value

endreturn string

endfunction cardtool.getcardnamebycards(cards)

local string=""

for i = 1,#cards do

string=string..cardtool.getcardnamebycard(cards[i])

endreturn string

end

上述牌資訊轉換的牌為:

梅花3梅花6紅桃6紅桃1梅花7

梅花9梅花j梅花k梅花8紅桃k

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

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

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

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

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

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