本质上是有一张桌子,玩家A加注到100 $,玩家B跟注(接受),玩家C只有50 $,因此底池分别为100 $(在玩家A和B之间)和150 $(在所有三位玩家之间,因为每个人都以50美元筹码)。
如何实现这种功能并正确处理所有电位器?
这是我到目前为止的内容:
static public void FillPots(Room r, decimal Val, int Player)
{
decimal NewRaise = Val;
if (NewRaise > 0)
{
foreach (Program.Player pz in r.Seated)
{
if (pz == null) { continue; }
if (pz.BuyIn < NewRaise)
{
Pot _pot = new Pot { PotSize = r.MaxPlayers, PotBuy = (NewRaise - pz.BuyIn), PotVal = new decimal[r.MaxPlayers] };
Array.Clear(_pot.PotVal, 0, r.MaxPlayers);
r.Pots.Add(_pot);
NewRaise -= (NewRaise - pz.BuyIn);
}
}
}
for (int i = 0; i < r.Pots.Count; i++)
{
if (r.Pots[i].PotVal[Player] == 0m && NewRaise >= r.Pots[i].PotBuy)
{
r.Pots[i].PotVal[Player] += r.Pots[i].PotBuy;
NewRaise -= r.Pots[i].PotBuy;
}
}
if (NewRaise > 0)
{
Pot _pot = new Pot { PotSize = r.MaxPlayers, PotBuy = (NewRaise), PotVal = new decimal[r.MaxPlayers] };
Array.Clear(_pot.PotVal, 0, r.MaxPlayers);
_pot.PotVal[Player] += NewRaise;
r.Pots.Add(_pot);
NewRaise = 0;
}
}
一切都很混乱。保持每个单独玩家相对于数组中玩家编号(int Player)的位置至关重要。
最佳答案
我不会和C#对话,但是由于您在这里没有答案,因此我将大致告诉您如何处理扑克筹码。有两种方法:以底池为中心和以玩家为中心。我通常更喜欢后者,因为要管理的数据较少。
您需要为“组合底池”(我们称其为POT)一个变量,为“当前总下注金额”(CBET)一个变量,为最后加注量(LRAISE)一个变量,以及每个玩家三个变量:赌注(PSTAKE) [N]),“当前下注”(PBET [N]),“底池贡献”(PCONTRIB [N])。
发牌时,将POT和每个玩家的PCONTRIB []设置为0。如果有底注,请将它们添加到POT和每个玩家的PCONTRIB []中,将其从PSTAKE []中删除。
在每个下注回合开始时,将CBET,LRAISE和所有PBET []设置为0。如果这是第一回合并且有盲注,则将那些玩家的PBET []设置为盲注数量,将其从PSTAKE []中删除。 。
每个玩家依次有以下三种选择:(1)弃牌(如果CBET为0,您可能要拒绝),(2)通话,在这种情况下,他必须使自己的PBET []等于CBET(如果CBET为0,则这称为“支票”,否则调用量为CBET-PBET [],必须将其从PSTAKE []移至PBET [])。 (3)加注,玩家必须将CBET金额至少增加LRAISE(并遵守其他任何限制,该金额将成为新的LRAISE),并从其注额中转移所需的金额。注意:您还需要跟踪最后一位加注者是谁,以便不允许他加注自己。
如果玩家的赌注不足以跟注或加注,则可以“全部”(如果允许的话)将其全部赌注移至他的PBET []。当所有玩家都跟注CBET或全押时,下注回合结束。如果一位玩家加注,其他所有玩家都弃牌,而全都不参加,则只需将彩池奖励给提升者。否则,对于每个玩家,将他的PBET []添加到他的PCONTRIB []和POT中。
如果手继续摊牌,则按如下方式下锅:从最佳手开始:他的可赢金额(W)是他的PCONTRIB []。转至每个玩家(包括他),从POT中减去W和该玩家的PCONTRIB [],然后将其奖励给获胜者。从玩家列表中删除获胜者,删除其PCONTRIB []现在为0的所有玩家,然后继续下一个最佳手牌。删除该赢家等,然后继续直到POT为0。
我认为以锅为中心的方法更加复杂。不用保留每个玩家的贡献,而是保留一个中心底池和边池的列表,并为每个底池列出参与该底池的玩家的列表(可能与玩家数量一样多)。然后,奖池由外而内授予,而不是如上所述的由内而外授予。这更像是在真正的游戏中教导经销商如何做到这一点。
关于c# - 填满扑克 jar ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17224913/