public void Referee_Break_EightBall_Pots()
        {
            var referee = GameFactory.CreateGameReferee(CueBallGameType.EightBall);

            referee.SetPlayers(CreateFirstPlayer(), CreateSecondPlayer());

            var shot = new Shot(CreateFirstPlayer()) as IShot;

            shot.BallsHitOnRails = new[]
            {
                Ball.One,
                Ball.Black,
                Ball.Five,
                Ball.Fifteen
            };

            shot.BallsPotted = new[]
            {
                Ball.One, Ball.Twelve, Ball.Eight
            };

            var gameResult = referee.IsValidBreak(shot);

            Assert.IsTrue(gameResult.IsSuccessful);
            Assert.IsTrue(gameResult.Result.HasFlag(ShotResult.ValidShot), "Should be a valid shot.");
            Assert.IsTrue(gameResult.Result.HasFlag(ShotResult.CanReRack), "Should have choice of Re-Rack");
        }
        public void First_Shot_Before_Player_Set_Throws_Exception()
        {
            var referee = GameFactory.CreateGameReferee(CueBallGameType.EightBall);

            var shot = new Shot(new Player("Valid_Player"));

            referee.IsValidBreak(shot);
        }
Пример #3
0
        public void Referee_Should_Validated_A_Valid_Breaking_Shot_When_Cue_Ball_FirstTouch_Is_Rail()
        {
            var referee = GameFactory.CreateGameReferee(CueBallGameType.Snooker);

            referee.SetPlayers(CreateFirstPlayer(), CreateSecondPlayer());

            var breakResult =
                referee.IsValidBreak(new Shot(CreateFirstPlayer())
            {
                FirstTouch       = CueBallTouch.Rail,
                FirstTouchedBall = Ball.Red
            });

            Assert.IsTrue(breakResult.IsSuccessful);
            Assert.IsTrue(breakResult.Result.HasFlag(ShotResult.ValidShot));
            Assert.IsTrue(breakResult.Result.HasFlag(ShotResult.OpenentContinues));
        }
Пример #4
0
        public void Referee_Should_Validated_An_Invalid_Breaking_Shot_When_Cue_Ball_Do_Not_Hit_Any_Red()
        {
            var referee = GameFactory.CreateGameReferee(CueBallGameType.Snooker);

            referee.SetPlayers(CreateFirstPlayer(), CreateSecondPlayer());

            var breakResult =
                referee.IsValidBreak(new Shot(CreateFirstPlayer())
            {
                FirstTouch       = CueBallTouch.Ball,
                FirstTouchedBall = Ball.Pink
            });

            Assert.IsTrue(breakResult.Result.HasFlag(ShotResult.InvalidShot));
            Assert.IsTrue(breakResult.Result.HasFlag(ShotResult.OpenentCan));
            Assert.IsTrue(breakResult.Result.HasFlag(ShotResult.AskToPlayAgain));
            Assert.IsTrue(breakResult.Result.HasFlag(ShotResult.CanReRack));
        }
Пример #5
0
        public void Referee_Should_Validated_A_Invalid_Breaking_Shot_When_Other_Than_Red_Is_Potted()
        {
            var referee = GameFactory.CreateGameReferee(CueBallGameType.Snooker);

            referee.SetPlayers(CreateFirstPlayer(), CreateSecondPlayer());

            var breakResult =
                referee.IsValidBreak(new Shot(CreateFirstPlayer())
            {
                FirstTouch       = CueBallTouch.Ball,
                FirstTouchedBall = Ball.Red,
                BallsPotted      = new[] { Ball.Red, Ball.Pink, }
            });

            Assert.IsTrue(breakResult.IsSuccessful);
            Assert.IsTrue(breakResult.Result.HasFlag(ShotResult.ValidShot));
            Assert.IsTrue(breakResult.Result.HasFlag(ShotResult.InvalidShot));
            Assert.IsTrue(breakResult.Result.HasFlag(ShotResult.OpenentContinues));
        }
        public void Breaking_Shot_Should_Make_Four_Ball_To_Hit_The_Rails()
        {
            var referee = GameFactory.CreateGameReferee(CueBallGameType.EightBall);

            referee.SetPlayers(CreateFirstPlayer(), CreateSecondPlayer());

            var shot = new Shot(CreateFirstPlayer());

            shot.BallsHitOnRails = new[]
            {
                Ball.One,
                Ball.Black,
                Ball.Five,
                Ball.Fifteen
            };

            var gameResult = referee.IsValidBreak(shot);

            Assert.IsTrue(gameResult.IsSuccessful);
            Assert.AreEqual(gameResult.Result, ShotResult.ValidShot);
        }
Пример #7
0
        public void ColorRundown_FirstPlayer_Hits_Blue_When_Green_Was_On_Table()
        {
            var firstPlayer         = CreateFirstPlayer();
            var snooker             = GameFactory.CreateGameReferee(CueBallGameType.Snooker) as ISnookerReferee;
            var gameInsightProvider = new Mock <IGameInsightProvider>();

            gameInsightProvider.SetupGet(provider => provider.BallsOnTable).Returns(() => CueBallGameType.Snooker.GetAllGameBalls());
            snooker.Initialize(gameInsightProvider.Object);
            snooker.SetPlayers(CreateFirstPlayer(), CreateSecondPlayer());
            snooker.ValidateShot(new Shot(firstPlayer)
            {
                FirstTouch       = CueBallTouch.Ball,
                FirstTouchedBall = Ball.Red,
                BallsPotted      = new[] { Ball.Red }
            });
            snooker.ValidateShot(new Shot(firstPlayer)
            {
                FirstTouch       = CueBallTouch.Ball,
                FirstTouchedBall = Ball.Blue,
                BallsPotted      = new[] { Ball.Blue }
            });
            gameInsightProvider.SetupGet(provider => provider.BallsOnTable).Returns(() => new List <Ball>
            {
                Ball.Cue,
                Ball.Black,
                Ball.Pink,
                Ball.Blue,
                Ball.Brown,
                Ball.Green,
            });
            var shotResult = snooker.ValidateShot(new Shot(firstPlayer)
            {
                FirstTouchedBall = Ball.Blue,
            });

            Assert.IsTrue(shotResult.HasFlag(ShotResult.InvalidShot));
            Assert.IsTrue(shotResult.HasFlag(ShotResult.OpenentContinues));
            Assert.IsTrue(shotResult.HasFlag(ShotResult.ReSpotColorBalls));
        }