如何在具有排名结果的游戏中组织 bets/prizes?

How to organize bets/prizes in a game with ranked results?

问题

我正在制作一个多人游戏,其中玩家最终根据他们的最终得分排名。我想根据:

算出他们win/lose到底有多少钱
  1. 他们的 ranking/score;
  2. 他们下注的大小。

例子

有一场5人的比赛,结果是这样的:

1. Ben, score 2115, bet 100
2. Jim, score 1856, bet 250
3. Lenny, score 1512, bet 30
4. Martha, score 1220, bet 70
5. Richard, score 987, bet 50

想法

现在,我如何决定谁得到多少钱?对我来说唯一显而易见的是玩家 #1 至少应该收回他们的赌注,这样他们就不会输。

我什至不能说在 2 位玩家的关键情况下,排名第 2 位玩家的全部赌注都归赢家。

为什么我要考虑下注的大小是为了不让一个下注 1 个硬币的玩家与另一个下注 100 个硬币的玩家对战,因此只有 1 个硬币的风险,而他们的潜在奖金是 100 个。那是对下注 100 个硬币的玩家不公平,因为他们冒的风险是收益的 100 倍。我害怕潜在的虐待。

另一种理论上可能存在的可疑情况是玩家最终得分相同。如果没有或相等的赌注,我们可以认为这是平局,但如果玩家做出不同的赌注呢?条件不对等,风险不对等,却取得了同样的成绩,这不是他们中的一个胜利吗?

可能的解决方案

我在考虑一个选项,让 "top half" 的玩家获胜,"bottom half" 的失败,以及可能的中间玩家抽屉。然后,在上面的游戏中,Lenny 是一个抽屉,将他的赌注 30 取回,不输不赢。 Martha 和 Richard 输了赌注,总共 120 个赌注被赢家 Ben 和 Jim 平分。但是有一些问题:

我尝试研究其他游戏中的投注系统,例如扑克、轮盘赌、赛马,但没有一个完全符合这种情况。

在最坏的情况下,我可能会考虑奖励来自 "the house" 的玩家,而不是其他玩家失去的东西。但我想把它作为玩家之间的游戏,而不是对抗房子。

P.S. 抱歉,如果这个问题不完全适合 Stack Overflow。在我看来,这实际上是一个关于 algorithm/formula 处理特定数据的编程问题。如果我在哪里得到好的建议,我会考虑去其他地方询问。

匹配最高赌注和最低赌注。重复。

在平局的情况下,将他们的赌注集中在一起,计算出该组的输赢金额,然后按比例分配给他们的投注金额。 (如果出来参差不齐,随机选谁gains/loses最后一个点。)

所以在你的例子中我们会这样做:

1. Ben, score 2115, bet 100
2. Jim, score 1856, bet 250
3. Lenny, score 1512, bet 30
4. Martha, score 1220, bet 70
5. Richard, score 987, bet 50

BenRichard 匹配。 Ben 赢得 50,Richard 退赛。

1. Ben, score 2115, bet 50
2. Jim, score 1856, bet 250
3. Lenny, score 1512, bet 30
4. Martha, score 1220, bet 70

BenMartha 匹配。 Ben 赢得 50 场并退出。

1. Jim, score 1856, bet 250
2. Lenny, score 1512, bet 30
3. Martha, score 1220, bet 20

JimMartha 匹配。 Jim 赢了 20 场,Martha 退赛了。

1. Jim, score 1856, bet 230
2. Lenny, score 1512, bet 30

JimLenny 匹配。 Jim 赢了 30 场,Lenny 退赛了。

1. Jim, score 1856, bet 200

我们完成了。最终的奖励划分为:

1. Ben, score 2115, has 200
2. Jim, score 1856, has 300
3. Lenny, score 1512, has 0
4. Martha, score 1220, has 0
5. Richard, score 987, has 0

而且现在奖金一般都上半区。没有人会得到或失去比他们付出的更多。

这是 "top half" 赢家和 "bottom half" 输家的变体("middle" 平局)。输的人下注的钱就是底池。

取最小的中奖赌注,乘以中奖人数。如果该金额大于底池中的金额,则金额为底池中的金额。现在根据他们的分数在获胜者之间分配该金额。移除下注最小的玩家。重复。

如果彩池中还有钱,那么这笔钱将按输家的赌注比例平分。

示例:

name:   Ben  Jim  Len  Mar  Ric
bets:   100  250   30   70   50
score: 2115 1856 1512 1220  987

pot: 120
minimum winning bet times number of winners: 100 * 2 = 200
amount to split: 120 (since 120<200)
Ben gets 120 * 2115 / (2115+1856) = 64
Jim gets 120 * 1856 / (2115+1856) = 56

Cash after the game is finished:
name:   Ben  Jim  Len  Mar  Ric
cash:   164  306   30    0    0

示例 2:

name:   Ben  Jim   Lu    Tim  Mar Ric 
bets:   100  250   10    120  200  80
score: 2115 1856 1512   1220  987 642

pot: 400
minimum winning bet times number of winners: 10 * 3 = 30
winners total score: 2115+1856+1512 = 5483
Ben gets 30 * 2115/5483 = 12
Jim gets 30 * 1856/5483 = 10
Lu  gets 30 * 1512/5483 =  8
remove 10 from each winning bet, Lu is done

remaining pot: 370
minimum winning bet times number of winners: 90 * 2 = 180
winners total score = 2115+1856 = 3971
Ben gets 180 * 2115/3971 = 96
Jim gets 180 * 1856/3971 = 84
remove 90 from each winning bet, Ben is done

remaining pot: 190
minimum winning bet times number of winners: 150 * 1 = 150
Jim gets 150

remaining pot: 40
total bets by the losers: 400
Tim gets 40 * 120/400 = 12
Mar gets 40 * 200/400 = 20
Ric gets 40 *  80/400 =  8

Cash after the game is finished:
name:   Ben  Jim   Lu    Tim  Mar Ric 
cash:   208  494   18     12   20   8