public (BackgammonAction?action, bool hasAction) GetAutomaticActions(BackgammonState state) { try { switch (state) { case { Winner: null, CurrentPlayer : null, DiceRolls : { White : { Count : 1 }, Black : { Count : 1 } } } :
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) ); }
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) ); }
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); }