Many changes. Will update merge request description with details

This commit is contained in:
Kwoth
2022-07-15 05:04:01 +02:00
parent d9011106ac
commit 0b720a0439
23 changed files with 1429 additions and 998 deletions

View File

@@ -0,0 +1,7 @@
namespace Nadeko.Econ.Gambling.Betdraw;
public enum BetdrawColorGuess
{
Red,
Black
}

View File

@@ -0,0 +1,83 @@
namespace Nadeko.Econ.Gambling.Betdraw;
public sealed class BetdrawGame
{
private static readonly NadekoRandom _rng = new();
private const decimal SINGLE_GUESS_MULTI = 2.075M;
private const decimal DOUBLE_GUESS_MULTI = 4.15M;
public BetdrawGame()
{
}
public BetdrawResult Draw(BetdrawValueGuess? val, BetdrawColorGuess? col, decimal amount)
{
if (val is null && col is null)
throw new ArgumentNullException(nameof(val));
var card = new Deck().CardPool[_rng.Next(0, 52)];
var realVal = card.Number < 7
? BetdrawValueGuess.Low
: BetdrawValueGuess.High;
var realCol = card.Suit is Deck.CardSuit.Diamonds or Deck.CardSuit.Hearts
? BetdrawColorGuess.Red
: BetdrawColorGuess.Black;
// if card is 7, autoloss
if (card.Number == 7)
{
return new()
{
Won = 0M,
Multiplier = 0M,
ResultType = BetdrawResultType.Lose,
Card = card,
};
}
byte win = 0;
if (val is BetdrawValueGuess valGuess)
{
if (realVal != valGuess)
return new()
{
Won = 0M,
Multiplier = 0M,
ResultType = BetdrawResultType.Lose,
Card = card
};
++win;
}
if (col is BetdrawColorGuess colGuess)
{
if (realCol != colGuess)
return new()
{
Won = 0M,
Multiplier = 0M,
ResultType = BetdrawResultType.Lose,
Card = card
};
++win;
}
var multi = win == 1
? SINGLE_GUESS_MULTI
: DOUBLE_GUESS_MULTI;
return new()
{
Won = amount * multi,
Multiplier = multi,
ResultType = BetdrawResultType.Win,
Card = card
};
}
}

View File

@@ -0,0 +1,9 @@
namespace Nadeko.Econ.Gambling.Betdraw;
public readonly struct BetdrawResult
{
public decimal Won { get; init; }
public decimal Multiplier { get; init; }
public BetdrawResultType ResultType { get; init; }
public Deck.Card Card { get; init; }
}

View File

@@ -0,0 +1,7 @@
namespace Nadeko.Econ.Gambling.Betdraw;
public enum BetdrawResultType
{
Win,
Lose
}

View File

@@ -0,0 +1,7 @@
namespace Nadeko.Econ.Gambling.Betdraw;
public enum BetdrawValueGuess
{
High,
Low,
}

View File

@@ -3,26 +3,31 @@
public sealed class BetflipGame
{
private readonly decimal _winMulti;
private readonly NadekoRandom _rng;
private static readonly NadekoRandom _rng = new NadekoRandom();
public BetflipGame(decimal winMulti)
{
_winMulti = winMulti;
_rng = new NadekoRandom();
}
public BetflipResult Flip(byte guess, decimal amount)
{
var side = _rng.Next(0, 2);
decimal won = 0;
if (side == guess)
won = amount * _winMulti;
{
return new BetflipResult()
{
Side = side,
Won = amount * _winMulti,
Multiplier = _winMulti
};
}
return new BetflipResult()
{
Side = side,
Won = won,
Side = side,
Won = 0,
Multiplier = 0,
};
}
}

View File

@@ -4,4 +4,5 @@ public readonly struct BetflipResult
{
public decimal Won { get; init; }
public byte Side { get; init; }
public decimal Multiplier { get; init; }
}

View File

@@ -2,15 +2,14 @@
public sealed class LulaGame
{
public static IReadOnlyList<decimal> DEFAULT_MULTIPLIERS = new[] { 1.7M, 1.5M, 0.2M, 0.1M, 0.3M, 0.5M, 1.2M, 2.4M };
private static readonly IReadOnlyList<decimal> DEFAULT_MULTIPLIERS = new[] { 1.7M, 1.5M, 0.2M, 0.1M, 0.3M, 0.5M, 1.2M, 2.4M };
private readonly IReadOnlyList<decimal> _multipliers;
private readonly NadekoRandom _rng;
private static readonly NadekoRandom _rng = new();
public LulaGame(IReadOnlyList<decimal> multipliers)
{
_multipliers = multipliers;
_rng = new();
}
public LulaGame() : this(DEFAULT_MULTIPLIERS)