public void Spin(int value = -1) { if (bets.Count < 1) { throw new Exception("No bets"); } if (value == -1) { value = Generic.GetRandomNumber(0, 38); } CurrentNumber = RDeepPositions.GetPositionByID(value); LastNumbers.Add(CurrentNumber); ValidateBetsForPlayers(); SettleBets(); foreach (RDeepPlayer player in boardPlayers) { player.UpgradeProbabilities(LastNumbers); } }
public IEnumerable <RDeepBet> GoForBet(RDeepPlayer player, List <RDeepPosition> LastNumbers) { if (player.coins.Count < 1) { throw new Exception("Running out of coins!"); } List <RDeepBet> result = new List <RDeepBet>(); RDeepPosition maxProbableNumber = RDeepPosition.Six; float maxProbability = maxProbableNumber.defaultProbability; if (probabilities.Count < 1) { UpdateProbabilities(LastNumbers); } foreach (RDeepPosition number in wheelNumbers) { if (maxProbability < probabilities[number]) { maxProbability = probabilities[number]; maxProbableNumber = number; } } List <Coin> betCoins = new List <Coin>(); int randomTotalCoins; if (player.coins.Count(coin => coin.isOnBet == false && coin.Value <= 25) < 4) { randomTotalCoins = 1; } else { randomTotalCoins = Generic.GetRandomNumber(1, 2); } for (int i = 0; i < randomTotalCoins; i++) { List <Coin> activeCoins = player.coins.Where(coin => coin.isOnBet == false && coin.Value <= 25).ToList(); int randomCoin = Generic.GetRandomNumber(0, activeCoins.Count); activeCoins[randomCoin].isOnBet = true; betCoins.Add(activeCoins[randomCoin]); System.Threading.Thread.Sleep(100); } result.Add(new RDeepBet( player, RDeepBetPositions.GetRDeepBetPositionByPositionIDs(new int[] { maxProbableNumber.ID }), betCoins)); return(result); }
internal static RDeepPosition GetPositionByID(int ID) { RDeepPosition result = null; foreach (RDeepPosition position in rDeepPositions) { if (position.ID == ID) { result = position; break; } } return(result); }
public void UpdateProbabilities(List <RDeepPosition> LastNumbers) { SetDefaultProbabilities(); if (LastNumbers.Count == 0) { return; } RDeepPosition currentPos = LastNumbers[LastNumbers.Count - 1]; foreach (PositionType positionType in Enum.GetValues(typeof(PositionType))) { if (positionType != PositionType.Green) { UpdateProbabilitiesByPosType(positionType, LastNumbers, currentPos); } } }
private PositionType GetPositionType(PositionTypeSubCategory subCategory, RDeepPosition pos) { if (subCategory == PositionTypeSubCategory.Color) { if (pos.isRed) { return(PositionType.Red); } else { return(PositionType.Black); } } else if (subCategory == PositionTypeSubCategory.OddEven) { if (pos.isEven) { return(PositionType.Even); } else { return(PositionType.Odd); } } else if (subCategory == PositionTypeSubCategory.LowHigh) { if (pos.isLow) { return(PositionType.Low); } else { return(PositionType.High); } } else if (subCategory == PositionTypeSubCategory.Dozen) { if (pos.isFirstDozen) { return(PositionType.FirstDozen); } else if (pos.isSecondDozen) { return(PositionType.SecondDozen); } else { return(PositionType.ThirdDozen); } } else if (subCategory == PositionTypeSubCategory.Column) { if (pos.isFirstColumn) { return(PositionType.FirstColumn); } else if (pos.isSecondColumn) { return(PositionType.SecondColumn); } else { return(PositionType.ThirdColumn); } } else { return(PositionType.Straight); } }
private void UpdateProbabilitiesByPosType(PositionType positionType, List <RDeepPosition> LastNumbers, RDeepPosition currentPos) { int HitCount = 1; int Factor = 0; float UpgradeRate = 0; PositionTypeSubCategory subCategory = GetPositonSubCategoryByPositionType(positionType); PositionTypeCategory category = GetPositonTypeCategory(subCategory); PositionType hitPositionType = GetPositionType(subCategory, currentPos); List <RDeepPosition> fromNumbers = new List <RDeepPosition>(); if (hitPositionType == PositionType.Straight) { fromNumbers.Add(currentPos); } else { fromNumbers = RDeepPositions.NumbersByPositionType(positionType).ToList(); } List <RDeepPosition> toNumbers = wheelNumbers.Except(fromNumbers).ToList(); if (positionType == hitPositionType) { // *** On Hit *** if (positionType != PositionType.Straight) { HitCount = GetPositionTypeHitCount(subCategory, LastNumbers); } Factor = GetProbabilityUpgradeFactorsOnHit(category, HitCount); } // *** On Miss *** Factor += GetProbabilityUpgradeFactorsOnFewerHits(LastNumbers, category, positionType); float Rate = GetProbabilityUpgradeRate(fromNumbers.Count()); UpgradeRate = Factor * Rate; ShiftProbability(fromNumbers, positionType, UpgradeRate); ShiftProbability(toNumbers, positionType, UpgradeRate * -1); }
private string DisplayGroupProbability(string posTypeShortName, PositionType positionType, RDeepPosition number) { string probability = string.Format("{0:+0.00000;-0.00000}", GroupsUpgradeProbability[positionType][number]); return(string.Concat(posTypeShortName, ": ", probability + "; ")); }