Loading...
Loading...
Compare original and translation side by side
RTP = (Total Amount Returned to Players / Total Amount Wagered) × 100
Target ranges by game type:
- Casual/Social: 95-98% RTP (player-friendly)
- Balanced: 92-95% RTP (sustainable)
- High-stakes: 88-92% RTP (house-favorable)RTP = (Total Amount Returned to Players / Total Amount Wagered) × 100
Target ranges by game type:
- Casual/Social: 95-98% RTP (player-friendly)
- Balanced: 92-95% RTP (sustainable)
- High-stakes: 88-92% RTP (house-favorable)House Edge = 100% - RTP
Example:
RTP = 96% → House Edge = 4%
For every 100 coins wagered, house keeps ~4 coins long-termHouse Edge = 100% - RTP
Example:
RTP = 96% → House Edge = 4%
For every 100 coins wagered, house keeps ~4 coins long-term| Variance | Hit Frequency | Max Win | Experience |
|---|---|---|---|
| Low | >40% | 2-10x | Steady, small wins |
| Medium | 20-40% | 10-50x | Balanced excitement |
| High | <20% | 50-500x | Rare big wins |
| 方差等级 | 命中频率 | 最大赢额 | 游戏体验 |
|---|---|---|---|
| 低 | >40% | 2-10倍 | 稳定的小额获胜 |
| 中 | 20-40% | 10-50倍 | 平衡的刺激感 |
| 高 | <20% | 50-500倍 | 罕见大额获胜 |
| Pot | Probability Range | Suggested RTP | Notes |
|---|---|---|---|
| Water | 45-65% success | 96% | Most stable |
| Sun | 35-55% success | 94% | Medium variance |
| Pest | 25-45% success | 92% | Higher risk/reward |
| Growth | 15-35% success | 90% | Jackpot-style |
| 奖池类型 | 概率范围 | 建议RTP | 说明 |
|---|---|---|---|
| 水奖池 | 45-65% 成功率 | 96% | 最稳定 |
| 日奖池 | 35-55% 成功率 | 94% | 中等方差 |
| 虫奖池 | 25-45% 成功率 | 92% | 高风险高回报 |
| 成长奖池 | 15-35% 成功率 | 90% | 头奖级玩法 |
interface BetCalculation {
level: 'fold' | 'call' | 'all_in';
amount: number;
multiplier: number;
potentialWin: number;
expectedValue: number;
}
function calculateBet(
coins: number,
level: BetLevel,
potSuccess: number,
multiplier: number
): BetCalculation {
const amounts = {
fold: 0,
call: Math.floor(coins * 0.1),
all_in: coins
};
const amount = amounts[level];
const potentialWin = Math.floor(amount * multiplier);
const expectedValue = (potSuccess * potentialWin) - ((1 - potSuccess) * amount);
return { level, amount, multiplier, potentialWin, expectedValue };
}interface BetCalculation {
level: 'fold' | 'call' | 'all_in';
amount: number;
multiplier: number;
potentialWin: number;
expectedValue: number;
}
function calculateBet(
coins: number,
level: BetLevel,
potSuccess: number,
multiplier: number
): BetCalculation {
const amounts = {
fold: 0,
call: Math.floor(coins * 0.1),
all_in: coins
};
const amount = amounts[level];
const potentialWin = Math.floor(amount * multiplier);
const expectedValue = (potSuccess * potentialWin) - ((1 - potSuccess) * amount);
return { level, amount, multiplier, potentialWin, expectedValue };
}Multiplier = (1 / Win_Probability) × RTP_Target
Example for 40% win rate at 94% RTP:
Multiplier = (1 / 0.40) × 0.94 = 2.35x
Payout table:
- Call bet (10%): Win = 2.35x stake
- All-in: Win = 2.35x stake (same multiplier, higher stakes)Multiplier = (1 / Win_Probability) × RTP_Target
Example for 40% win rate at 94% RTP:
Multiplier = (1 / 0.40) × 0.94 = 2.35x
Payout table:
- Call bet (10%): Win = 2.35x stake
- All-in: Win = 2.35x stake (same multiplier, higher stakes)| Outcome | Probability | Payout | Contribution to RTP |
|---------|-------------|--------|---------------------|
| Win | P% | Mx | P × M |
| Push | Q% | 1x | Q × 1 |
| Lose | R% | 0x | 0 |
| TOTAL | 100% | - | RTP% || Outcome | Probability | Payout | Contribution to RTP |
|---------|-------------|--------|---------------------|
| Win | P% | Mx | P × M |
| Push | Q% | 1x | Q × 1 |
| Lose | R% | 0x | 0 |
| TOTAL | 100% | - | RTP% || Pot State | Probability | Payout | RTP Contribution |
|-----------|-------------|--------|------------------|
| ≥80% | 15% | 3.0x | 45% |
| 50-79% | 35% | 1.8x | 63% |
| 20-49% | 30% | 0.5x | 15% |
| <20% | 20% | 0x | 0% |
| TOTAL | 100% | - | 123% → adjust |
Adjustment needed: Scale payouts by 0.94/1.23 = 0.764
New payouts: 2.29x, 1.38x, 0.38x, 0x → RTP ≈ 94%| Pot State | Probability | Payout | RTP Contribution |
|-----------|-------------|--------|------------------|
| ≥80% | 15% | 3.0x | 45% |
| 50-79% | 35% | 1.8x | 63% |
| 20-49% | 30% | 0.5x | 15% |
| <20% | 20% | 0x | 0% |
| TOTAL | 100% | - | 123% → adjust |
Adjustment needed: Scale payouts by 0.94/1.23 = 0.764
New payouts: 2.29x, 1.38x, 0.38x, 0x → RTP ≈ 94%| Lever | Effect on Players | Effect on Revenue |
|---|---|---|
| ↑ Base win rate | More engagement | ↓ House edge |
| ↑ Max multiplier | Higher excitement | Variance risk |
| ↑ Tier thresholds | Harder to win big | ↑ House edge |
| ↓ Bet minimums | More accessibility | ↓ Revenue per bet |
| 调节项 | 对玩家的影响 | 对收益的影响 |
|---|---|---|
| ↑ 基础胜率 | 提升玩家参与度 | ↓ 庄家优势 |
| ↑ 最大乘数 | 提升刺激感 | 方差风险增加 |
| ↑ 等级阈值 | 大额获胜难度提升 | ↑ 庄家优势 |
| ↓ 最低投注额 | 提升游戏可及性 | ↓ 单注收益 |
Target metrics per session:
- Average session: 10-15 bets
- Net outcome: -5% to +20% of starting bankroll
- "Near miss" rate: 15-20% (engagement driver)
- Big win frequency: 1 in 20-50 sessionsTarget metrics per session:
- Average session: 10-15 bets
- Net outcome: -5% to +20% of starting bankroll
- "Near miss" rate: 15-20% (engagement driver)
- Big win frequency: 1 in 20-50 sessionsfunction simulateSession(
startingCoins: number,
betsPerSession: number,
betSize: number,
winProb: number,
winMultiplier: number
): SimulationResult {
let coins = startingCoins;
let wins = 0;
for (let i = 0; i < betsPerSession; i++) {
coins -= betSize;
if (Math.random() < winProb) {
coins += betSize * winMultiplier;
wins++;
}
}
return {
finalCoins: coins,
netChange: coins - startingCoins,
winRate: wins / betsPerSession,
rtp: (coins + (betsPerSession * betSize) - startingCoins) / (betsPerSession * betSize)
};
}
// Run 10,000 sessions to validate RTP converges to targetfunction simulateSession(
startingCoins: number,
betsPerSession: number,
betSize: number,
winProb: number,
winMultiplier: number
): SimulationResult {
let coins = startingCoins;
let wins = 0;
for (let i = 0; i < betsPerSession; i++) {
coins -= betSize;
if (Math.random() < winProb) {
coins += betSize * winMultiplier;
wins++;
}
}
return {
finalCoins: coins,
netChange: coins - startingCoins,
winRate: wins / betsPerSession,
rtp: (coins + (betsPerSession * betSize) - startingCoins) / (betsPerSession * betSize)
};
}
// Run 10,000 sessions to validate RTP converges to target