这里主要就德州扑克如何进行分池做分析




主池:当轮次下注数相同的部分进入主池


分池:当轮次下注不足时,多出的部分

分池出现的原因就是有人allin啦,当allin的人数逐渐增多,allin数值又不相同的情况下,就会出现多个分池啦!




分池思路:

根据allin的玩家数来分池,如果allin玩家只有一位,那么当轮只有一个主池.下一轮有玩家下注时开始出现边池,接下来所有玩家的注都进入第一个边池.
依次类推,直到游戏结束.

根据玩家进行的分池分析(这里只考虑出现allin玩家的情况):


--弃牌玩家:   弃牌玩家的注根据allin玩家的下注数进池


--跟注玩家:  跟注玩家一定是当轮下注最多的,所以每一个池内都会有跟注玩家下的注

--allin玩家 : alin最小的玩家只参与主池, alin最大的玩家判断是否与下注最大相同,  相同:从主池参与到最后出现的池 
不相同:参与到倒数第二个出现的池



首先将allin的玩家数进行排序,

allin玩家为n位,当n>=2时,alin最小的玩家只参与主池,判断allin最大值是否与小于注玩家下注数,小于则有n+1个池,相等则有n个池. 
此时对应的池中的注为:  allin[n]*参与该池下注的非弃牌玩家数+(弃牌玩家下注-allin[n-1])     ,没有allin[n-1]时为0

赢家拿走参与过的池,赢家未参与的池退回给多下注的玩家



local function FlytoWhere(allin,normal,abandon)     --对玩家进行排序      
--allinplayer{{allin玩家索引,allin数值}} normalplayer{{跟注玩家索引,下注数值}}
abandonplayer{{弃牌玩家索引,弃牌数值}}        local allinplayer={} local normalplayer={}
local abandonplayer={} if not (allin and #allin>0) then allinplayer=nil else
for n=1,#allin do if allin[n] and allin[n][2]>0 then
table.insert(allinplayer,{allin[n][1],allin[n][2]}) end end end if not (normal
and #normal>0) then normalplayer=nil else for n=1,#normal do if normal[n] and
normal[n][2]>0 then table.insert(normalplayer,{normal[n][1],normal[n][2]}) end
end end if not (abandon and #abandon>0) then abandonplayer=nil else
print("abandon :"..#abandon) for n=1,#abandon do if abandon[n] and
abandon[n][2]>0 then table.insert(abandonplayer,{abandon[n][1],abandon[n][2]})
end end end --排序完毕  计算池的数量 if not (allinplayer and #allinplayer>0) then
allinplayer=nil end if not (abandonplayer and #abandonplayer>0) then
abandonplayer=nil end if not (normalplayer and #normalplayer>0) then
normalplayer=nil end if allinplayer and abandonplayer then
--根据allin筹码计算出每池最低进入筹码 local Cmtab={} if normalplayer then if
normalplayer[1][2]>allinplayer[#allinplayer][2] then
table.insert(Cmtab,normalplayer[1][2]) end end for n=2,#allinplayer do if
allinplayer[n-1][2]~=allinplayer[n][2] then --Allin的值不同,分池
table.insert(Cmtab,allinplayer[n-1][2]) end end
table.insert(Cmtab,allinplayer[#allinplayer][2])--加入最后最小的池 for
x=1,#abandonplayer do if abandonplayer[x][2]>0 then --判断弃牌有注玩家进入哪一个池中 for
m=1,#Cmtab do if abandonplayer[x][2]>=Cmtab[m] then
--allin是由大到小排序的,所以Cmtab中也是由大到小排序 if abandonplayer[x][2]==Cmtab[m] then
--判断到底是大于还是等于 print("玩家:"..abandonplayer[x],"下注进入池"..(#Cmtab-m+1).."
 一共产生了"..#Cmtab.."个池") else
                                print("玩家:"..abandonplayer[x],"下注进入池"..(#Cmtab-m+2).."
 一共产生了"..#Cmtab.."个池")   end break elseif m==#Cmtab then
                            print("玩家:"..abandonplayer[x],"下注进入池"..1.."
 一共产生了"..#Cmtab.."个池") --弃牌但有注,但为最小注,直接进底池 end end end end end















   

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信