예제 #1
0
        public void RouletteGameTest()
        {
            var ott = new RouletteGame();

            Assert.AreEqual(38, ott.RouletteNumbers.Length);

            // Test RouletteGame has generated valid bin numbers
            CollectionAssert.AreEquivalent(Enumerable.Range(0, 38).ToArray(),
                                           ott.RouletteNumbers.Select(x => (int)x.Val).ToArray());

            // Test RouletteGame actually generates random bins each time
            {
                var randomBins = new List <RouletteNumber>();

                for (int i = 0; i < 10; i++)
                {
                    randomBins.Add(ott.SpinWheel());
                }

                CollectionAssert.AreNotEquivalent(Enumerable.Range(0, 10).ToArray(),
                                                  randomBins.Select(x => (int)x.Val).ToArray());


                bool isRigged = false;
                foreach (var b in randomBins)
                {
                    isRigged = randomBins.FindAll(x => x == b).Count > 5;
                    if (isRigged)
                    {
                        break;
                    }
                }
                Assert.IsFalse(isRigged);
            }
        }
 public void setup()
 {
     rsRoulette = new RouletteStub();
     bsBet = new BetStub();
     uisStub = new UIStub();
     rgTestObj = new RouletteGame(rsRoulette, uisStub);
 }
예제 #3
0
 public void Setup()
 {
     // Arrange
     _roulette = Substitute.For <IRoulette>();
     _uut      = new RouletteGame(_roulette);
     _roulette.GetResult().Returns(new Field(4, Field.Black));
 }
 public void Setup()
 {
     _roulette = Substitute.For <IRoulette>();
     _uut      = new RouletteGame(_roulette);
     _roulette.GetResult().Returns(new Field(2, Field.Black));
     _fieldBet = Substitute.For <IFieldBet>();
     _fieldBet.PlayerName.Returns("TestPlayer");
 }
예제 #5
0
        private double HandleNo7StraightWins(RouletteGame rouletteGame, Player player, int betStartAmount,
                                             ref PocketColor lastHitColor, ref int blackStraightWins, ref int redStraightWins)
        {
            W = PreventImpossibleBet(player.Budget, W);
            var result = SpinRouletteWithExceptionHandling(rouletteGame, new ColorBet(W, PocketColor.Red));

            lastHitColor =
                HandleRegularResult(betStartAmount, result, lastHitColor, ref blackStraightWins, ref redStraightWins);
            return(result);
        }
예제 #6
0
        public override StrategyResult Execute(RouletteGame rouletteGame, int betStartAmount)
        {
            C = 0;
            W = betStartAmount;
            double minBet      = betStartAmount,
                   maxBet      = betStartAmount,
                   startBudget = Player.Budget,
                   minBudget   = Player.Budget,
                   maxBudget   = Player.Budget;
            List <double> bets = new List <double>();

            int         redStraightWins = 0, blackStraightWins = 0;
            PocketColor lastHitColor = PocketColor.Green;

            for (int i = 0; i < Cycles; i++)
            {
                double result = 0;
                if (redStraightWins == 7)
                {
                    redStraightWins = Handle7RedStraightWins(rouletteGame, Player, out lastHitColor, out result);
                }
                else if (blackStraightWins == 7)
                {
                    blackStraightWins = Handle7BlackStraightWins(rouletteGame, Player, out lastHitColor, out result);
                }
                else
                {
                    result = HandleNo7StraightWins(rouletteGame, Player, betStartAmount, ref lastHitColor, ref blackStraightWins, ref redStraightWins);
                }

                Player.Budget += result;
                CyclesRan++;
                CollectStats(W, bets, ref maxBet, ref minBet, ref minBudget, ref maxBudget, Player.Budget);

                if (Player.IsBroke)
                {
                    break;
                }
            }

            return(new StrategyResult()
            {
                EndBudget = Player.Budget,
                Strategy = "Waiting",
                CyclesRan = Cycles,
                MaxBet = maxBet,
                MinBet = minBet,
                AllBets = bets,
                StartBudget = startBudget,
                Name = Player.Name,
                MaxBudget = maxBudget,
                MinBudget = minBudget
            });
        }
예제 #7
0
        private int Handle7RedStraightWins(RouletteGame rouletteGame, Player player, out PocketColor lastHitColor,
                                           out double result)
        {
            var redStraightWins = 0;

            lastHitColor = PocketColor.Green;

            W      = PreventImpossibleBet(player.Budget, W);
            result = SpinRouletteWithExceptionHandling(rouletteGame, new ColorBet(W, PocketColor.Black));
            return(redStraightWins);
        }
예제 #8
0
        static void Main()
        {
            RouletteGame roulette = new RouletteGame();

            Player1 player1 = new Player1(roulette, "Kirill", "Korzun", 1);
            Player2 player2 = new Player2(roulette, "Oleg", "Olegich", 12);

            roulette.SimulateGame();

            Console.ReadLine();
        }
예제 #9
0
        public override StrategyResult Execute(RouletteGame rouletteGame, int betStartAmount)
        {
            InitSequence(betStartAmount);
            double minBet      = betStartAmount,
                   maxBet      = betStartAmount,
                   startBudget = Player.Budget,
                   minBudget   = Player.Budget,
                   maxBudget   = Player.Budget;
            List <double> bets = new List <double>();

            for (int i = 0; i < Cycles; i++)
            {
                // Sequence is finished
                if (_sequence.Count == 0)
                {
                    break;
                }

                W = _sequence.Count == 1 ? _sequence.First() : _sequence.First() + _sequence.Last();

                W = PreventImpossibleBet(Player.Budget, W);
                double result = SpinRouletteWithExceptionHandling(rouletteGame, new ColorBet(W, PocketColor.Red));

                UpdateSequenceAccordingToResult(result);

                Player.Budget += result;
                CyclesRan++;
                CollectStats(W, bets, ref maxBet, ref minBet, ref minBudget, ref maxBudget, Player.Budget);

                if (Player.IsBroke)
                {
                    break;
                }
            }

            return(new StrategyResult()
            {
                EndBudget = Player.Budget,
                Strategy = "Cancellation",
                CyclesRan = CyclesRan,
                MaxBet = maxBet,
                MinBet = minBet,
                AllBets = bets,
                StartBudget = startBudget,
                Name = Player.Name,
                MaxBudget = maxBudget,
                MinBudget = minBudget
            });
        }
예제 #10
0
        protected double SpinRouletteWithExceptionHandling(RouletteGame rouletteGame, Bet bet)
        {
            double result = 0.0;

            try
            {
                result    = rouletteGame.PlaceBetAndSpin(bet);
                WPrevious = W;
            }
            catch (ArgumentException)
            {
                bet.Amount = WPrevious;
                result     = rouletteGame.PlaceBetAndSpin(bet);

                W = WPrevious;
            }

            return(result);
        }
예제 #11
0
        public override StrategyResult Execute(RouletteGame rouletteGame, int betStartAmount)
        {
            W = betStartAmount;
            D = 0;
            double minBet      = betStartAmount,
                   maxBet      = betStartAmount,
                   startBudget = Player.Budget,
                   minBudget   = Player.Budget,
                   maxBudget   = Player.Budget;
            List <double> bets = new List <double>();

            for (int i = 0; i < Cycles; i++)
            {
                Bet bet = new ColorBet(W, PocketColor.Red);
                W = PreventImpossibleBet(Player.Budget, W);
                double result = SpinRouletteWithExceptionHandling(rouletteGame, new ColorBet(W, PocketColor.Red));

                UpdateWagerAndStraightWinsAccordingToResult(betStartAmount, result);

                Player.Budget += result;
                CyclesRan++;
                CollectStats(W, bets, ref maxBet, ref minBet, ref minBudget, ref maxBudget, Player.Budget);

                if (Player.IsBroke)
                {
                    break;
                }
            }

            return(new StrategyResult()
            {
                EndBudget = Player.Budget,
                Strategy = "1-3-2-6",
                CyclesRan = Cycles,
                MaxBet = maxBet,
                MinBet = minBet,
                AllBets = bets,
                StartBudget = startBudget,
                Name = Player.Name,
                MaxBudget = maxBudget,
                MinBudget = minBudget
            });
        }
예제 #12
0
        private static void Main()
        {
            var game = new RouletteGame(new Roulette(new Randomzier(), new FieldFactory()));

            game.OpenBets();
            game.PlaceBet(new ColorBet("Player 1", 100, Field.Black));
            game.PlaceBet(new ColorBet("Player 1", 100, Field.Red));

            game.PlaceBet(new EvenOddBet("Player 2", 100, true));
            game.PlaceBet(new EvenOddBet("Player 2", 100, false));

            for (uint i = 0; i < 36; i++)
            {
                game.PlaceBet(new FieldBet("Player 3", 100, i));
            }

            game.CloseBets();
            game.SpinRoulette();
            game.PayUp();
        }
예제 #13
0
        static void Main(string[] args)
        {
            var game = new RouletteGame(new Roulette(new StandardFieldFactory(), new MyRandom()));

            game.OpenBets();
            game.PlaceBet(new ColorBet("Player 1", 100, Field.Black));
            game.PlaceBet(new ColorBet("Player 1", 100, Field.Red));

            game.PlaceBet(new EvenOddBet("Player 2", 100, true));
            game.PlaceBet(new EvenOddBet("Player 2", 100, false));

            for (uint i = 0; i < 36; i++)
            {
                game.PlaceBet(new FieldBet("Player 3", 100, i));
            }

            game.CloseBets();
            game.SpinRoulette();
            game.PayUp();
            Console.ReadKey();
        }
예제 #14
0
 public KamoteStrategy(RouletteGame game, GameParams gameParam)
     : base(game, gameParam)
 {
 }
 public void InitRouletteGame(int?minimumBid, int?maximumBid)
 {
     _rouletteGame = RouletteGameFactory.Create(minimumBid, maximumBid);
 }
예제 #16
0
 public void teardown()
 {
     rgTestObj = null;
     uisStub = null;
     bsBet = null;
     rsRoulette = null;
 }
예제 #17
0
 public Martingale(RouletteGame game, GameParams gameParam)
     : base(game, gameParam)
 {
 }
예제 #18
0
 public OneThreeTwoFourDozensMartingale(RouletteGame game, GameParams gameParams, Color color, int martingaleLimit)
     : base(game, gameParams)
 {
     Color           = color;
     MartingaleLimit = martingaleLimit;
 }
예제 #19
0
 public OneThreeTwoFourDozensChangeColor(RouletteGame game, GameParams gameParams, Color color)
     : base(game, gameParams)
 {
     Color = color;
 }
예제 #20
0
 public TheoryOfNineAndOneThreeTwoFour(RouletteGame game, GameParams gameParam)
     : base(game, gameParam)
 {
 }
예제 #21
0
        public void Init()
        {
            var uut = new RouletteGame(new Roulette());

            _game = uut;
        }
예제 #22
0
 public OneThreeTwoFour(RouletteGame game, GameParams gameParam, Color color)
     : base(game, gameParam)
 {
     Color = color;
 }
예제 #23
0
 public abstract StrategyResult Execute(RouletteGame rouletteGame, int betStartAmount);
예제 #24
0
 public StrategyBase(RouletteGame game, GameParams gameParam)
 {
     GameParams = gameParam;
     Game       = game;
 }
예제 #25
0
 public TheoryOfNine(RouletteGame game, GameParams gameParam)
     : base(game, gameParam)
 {
 }