Пример #1
0
 public (BackgammonAction?action, bool hasAction) GetAutomaticActions(BackgammonState state)
 {
     try
     {
         switch (state)
         {
         case { Winner: null, CurrentPlayer : null, DiceRolls : { White : { Count : 1 }, Black : { Count : 1 } } } :
Пример #2
0
        public void CatchWhenNoMovesCanBeMadeByWhite()
        {
            var rules = new Rules(new FakeDieRoller());
            var state = new BackgammonState()
            {
                Undo          = null,
                CurrentPlayer = Player.White,
                DiceRolls     = new DiceState(Player.White, new[] { 4, 5 }, Array.Empty <int>()),
                Points        = new[]
                {
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    Black(2),
                    Black(2),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    White(2),
                },
                Bar = new PointState(0, 0)
            };


            var(invalid, hasAction) = rules.GetAutomaticActions(state);
            Assert.True(hasAction);

            var rolls = Assert.IsType <BackgammonCannotUseRoll>(invalid);

            Assert.Collection(rolls.DieValues,
                              a => Assert.Equal(4, a),
                              a => Assert.Equal(5, a)
                              );
        }
Пример #3
0
        public void CatchWhenCannotMoveOffBarByBlack()
        {
            var rules = new Rules(new FakeDieRoller());
            var state = new BackgammonState()
            {
                Undo          = null,
                CurrentPlayer = Player.Black,
                DiceRolls     = new DiceState(Player.Black, new[] { 6 }, Array.Empty <int>()),
                Points        = new[]
                {
                    Black(2),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    White(2),
                    White(2),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                },
                Bar = new PointState(white: 0, black: 1)
            };

            var(invalid, hasAction) = rules.GetAutomaticActions(state);
            Assert.True(hasAction);

            var rolls = Assert.IsType <BackgammonCannotUseRoll>(invalid);

            Assert.Collection(rolls.DieValues,
                              a => Assert.Equal(6, a)
                              );
        }
Пример #4
0
        public void AllowValidMovesByWhiteInOrder()
        {
            var rules = new Rules(new FakeDieRoller());
            var state = new BackgammonState()
            {
                Undo          = null,
                CurrentPlayer = Player.White,
                DiceRolls     = new DiceState(Player.White, new[] { 4, 5 }, Array.Empty <int>()),
                Points        = new[]
                {
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    Black(2),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    Black(2),
                    NoCheckers(),
                    NoCheckers(),
                    NoCheckers(),
                    White(1),
                },
                Bar = new PointState(0, 0)
            };

            var(_, hasAction) = rules.GetAutomaticActions(state);
            Assert.False(hasAction);
        }