public void CamelHelper_TrapSpace_IsValid_Pos0Invalid() { var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(4, startingPositions); Assert.AreEqual(false, CamelHelper.IsValidTrapSpace(gamestate, 0, 0), "valid at pos 0"); }
public void RulesEngine_PlacePluss_OutOfBounds() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(2, startingPositions); var engine = new RulesEngine(gamestate, seed: 2); var change = engine.Getchange(0, new PlayerAction() { CamelAction = CamelAction.PlacePlussTrap, Value = -1 }); Assert.IsTrue(change == null, "illegal space 1"); change = engine.Getchange(0, new PlayerAction() { CamelAction = CamelAction.PlacePlussTrap, Value = 16 }); Assert.IsTrue(change == null, "illegal space 16"); change = engine.Getchange(0, new PlayerAction() { CamelAction = CamelAction.PlacePlussTrap, Value = 100 }); Assert.IsTrue(change == null, "illegal space 100"); }
public void RulesEngine_PlacePluss_OnOwnPlussTrap() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(2, startingPositions); gamestate.Traps[0].Location = 5; gamestate.Traps[0].Move = 1; var engine = new RulesEngine(gamestate, seed: 2); var change = engine.Getchange(0, new PlayerAction() { CamelAction = CamelAction.PlacePlussTrap, Value = 4 }); Assert.IsTrue(change != null, "legal space 4"); change = engine.Getchange(0, new PlayerAction() { CamelAction = CamelAction.PlacePlussTrap, Value = 5 }); Assert.IsTrue(change == null, "illegal space 5"); change = engine.Getchange(0, new PlayerAction() { CamelAction = CamelAction.PlacePlussTrap, Value = 6 }); Assert.IsTrue(change != null, "legal space 6"); }
private GameState Setup() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(4, startingPositions); return(gamestate); }
public void CamelHelper_TrapSpace_IsValid_NonOccupied() { var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(4, startingPositions); for (var i = 4; i < 16; i++) { Assert.AreEqual(true, CamelHelper.IsValidTrapSpace(gamestate, 0, i), $"valid at pos {i}"); } }
public void CamelHelper_TrapSpace_IsValid_EnemyTrap() { var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(4, startingPositions); gamestate.Traps[0].Location = 5; Assert.AreEqual(false, CamelHelper.IsValidTrapSpace(gamestate, 1, 4), "Invalid at pos 4"); Assert.AreEqual(false, CamelHelper.IsValidTrapSpace(gamestate, 1, 5), "Invalid at pos 5"); Assert.AreEqual(false, CamelHelper.IsValidTrapSpace(gamestate, 1, 6), "Invalid at pos 6"); }
public void CamelHelper_TrapSpace_IsValid_OwnTrapMinus() { var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(4, startingPositions); gamestate.Traps[1].Location = 5; gamestate.Traps[1].Move = -1; Assert.AreEqual(true, CamelHelper.IsValidTrapSpace(gamestate, 1, 4), "valid at pos 4"); Assert.AreEqual(true, CamelHelper.IsValidTrapSpace(gamestate, 1, 5), "valid at pos 5"); Assert.AreEqual(true, CamelHelper.IsValidTrapSpace(gamestate, 1, 6), "valid at pos 6"); }
public void CamelHelper_TrapSpace_GetFreeTrapSpaces_Others() { var startingPositions = TestHelper.ConvertToStartingPositions("2,0 2,1 2,2 5,3 5,4"); var gamestate = new ImplementedGameState(4, startingPositions); gamestate.Traps[1].Location = 3; gamestate.Traps[2].Location = 9; var availible = string.Join(" ", CamelHelper.GetFreeTrapSpaces(gamestate, 0, positive: true, maxLookahead: 20).OrderBy(x => x)); Assert.AreEqual("6 7 11 12 13 14 15", availible); }
public void RulesEngine_ThrowDice_NoAction() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(4, startingPositions); var engine = new RulesEngine(gamestate, seed: 1); var change = engine.Getchange(0, new PlayerAction() { CamelAction = CamelAction.NoAction }); Assert.IsTrue(change is NoActionStateChange); }
public void Unit_RevertState_DiceThrow() { // 1: blue, green, white | 2: red, yellow var startString = "1,0 1,1 1,2 2,3 2,4"; var startingPositions = TestHelper.ConvertToStartingPositions(startString); var gamestate = new ImplementedGameState(2, startingPositions, 16, 3); var change = new DiceThrowStateChange(0, CamelColor.Blue, 1); // 2: red, yellow, blue, green, white gamestate.Apply(change).Revert(change); AssertBaseState(gamestate, startString); }
public void Unit_State_DiceThrow() { // 1: blue, green, white | 2: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 1,1 1,2 2,3 2,4"); var gamestate = new ImplementedGameState(2, startingPositions, 16, 3); var change = new DiceThrowStateChange(0, CamelColor.Blue, 1); // 2: red, yellow, blue, green, white gamestate.Apply(change); Assert.AreEqual("2,2 2,3 2,4 2,0 2,1", gamestate.CamelPositionToString(), "Camel positions"); Assert.AreEqual(4, gamestate.Money[0], "money"); }
public void CamelHelper_GetCamelWins_Full_NoTraps() { // 1: blue, green, white | 2: red, yellow var startString = "1,0 1,1 1,2 2,3 2,4"; var startingPositions = TestHelper.ConvertToStartingPositions(startString); var gamestate = new ImplementedGameState(1, startingPositions); var wins = CamelHelper.GetCamelWins(gamestate, out var money); Assert.AreEqual(3107, wins[CamelColor.Blue], "blue"); Assert.AreEqual(6226, wins[CamelColor.Green], "green"); Assert.AreEqual(9329, wins[CamelColor.White], "white"); Assert.AreEqual(3302, wins[CamelColor.Red], "red"); Assert.AreEqual(7196, wins[CamelColor.Yellow], "yellow"); }
public void RulesEngine_ScoreGame_NoBets() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(4, startingPositions); var engine = new RulesEngine(gamestate, seed: 1); engine.ScoreGame(); Assert.AreEqual(3, gamestate.Money[0], "money p0"); Assert.AreEqual(3, gamestate.Money[1], "money p1"); Assert.AreEqual(3, gamestate.Money[2], "money p2"); Assert.AreEqual(3, gamestate.Money[3], "money p3"); }
public void RulesEngine_ScoreGame_Losers() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(8, startingPositions); gamestate.LoserBets.Add(new GameEndBet() { Player = 7, CamelColor = CamelColor.Blue }); // 8 gamestate.LoserBets.Add(new GameEndBet() { Player = 5, CamelColor = CamelColor.Blue }); // 5 gamestate.LoserBets.Add(new GameEndBet() { Player = 3, CamelColor = CamelColor.Blue }); // 3 gamestate.LoserBets.Add(new GameEndBet() { Player = 2, CamelColor = CamelColor.Blue }); // 2 gamestate.LoserBets.Add(new GameEndBet() { Player = 1, CamelColor = CamelColor.Blue }); gamestate.LoserBets.Add(new GameEndBet() { Player = 0, CamelColor = CamelColor.Blue }); gamestate.LoserBets.Add(new GameEndBet() { Player = 6, CamelColor = CamelColor.Blue }); var engine = new RulesEngine(gamestate, seed: 1); engine.ScoreGame(); // 8, 5, 3, 2, 1, 1, 1, 1, 1, 1, 1 Assert.AreEqual(4, gamestate.Money[0], "money p0"); Assert.AreEqual(4, gamestate.Money[1], "money p1"); Assert.AreEqual(5, gamestate.Money[2], "money p2"); Assert.AreEqual(6, gamestate.Money[3], "money p3"); Assert.AreEqual(3, gamestate.Money[4], "money p4"); Assert.AreEqual(8, gamestate.Money[5], "money p5"); Assert.AreEqual(4, gamestate.Money[6], "money p6"); Assert.AreEqual(11, gamestate.Money[7], "money p7"); }
public void RulesEngine_ThrowDice_ThrowDice() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(2, startingPositions); var engine = new RulesEngine(gamestate, seed: 1); var change = engine.Getchange(1, new PlayerAction() { CamelAction = CamelAction.ThrowDice }) as DiceThrowStateChange; Assert.IsTrue(change != null, "is dice throw"); Assert.AreEqual(CamelColor.Green, change.Color, "dice color"); Assert.AreEqual(1, change.Value, "dice value"); Assert.AreEqual(1, change.Player, "player"); }
public void Unit_RevertState_DiceThrow_Trap4() { // 1: blue, green, white | trap | 3: red, yellow var startString = "1,0 1,1 1,2 3,3 3,4"; var startingPositions = TestHelper.ConvertToStartingPositions(startString); var gamestate = new ImplementedGameState(2, startingPositions, 16, 3); gamestate.Traps[1].Location = 2; gamestate.Traps[1].Move = -1; var change = new DiceThrowStateChange(0, CamelColor.Green, 1); // 1: green, white, BLUE | trap | 3: red, yellow gamestate.Apply(change).Revert(change); AssertBaseState(gamestate, startString); }
public void RulesEngine_PickCard_Invalid() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(2, startingPositions); gamestate.BettingCards.RemoveAll(x => x.CamelColor == CamelColor.Red); var engine = new RulesEngine(gamestate, seed: 2); var change = engine.Getchange(0, new PlayerAction() { CamelAction = CamelAction.PickCard, Color = CamelColor.Red }); Assert.IsTrue(change == null, "is illegal"); }
public void CamelHelper_GetCamelWins_SimpleWin_Stacked() { // 1: blue, green, white | 2: red, yellow var startString = "1,0 1,1 1,2 2,3 2,4"; var startingPositions = TestHelper.ConvertToStartingPositions(startString); var gamestate = new ImplementedGameState(1, startingPositions); gamestate.RemainingDice.RemoveAll(x => x != CamelColor.Red); var wins = CamelHelper.GetCamelWins(gamestate, out var money); Assert.AreEqual(0, wins[CamelColor.Blue], "blue"); Assert.AreEqual(0, wins[CamelColor.Green], "green"); Assert.AreEqual(0, wins[CamelColor.White], "white"); Assert.AreEqual(0, wins[CamelColor.Red], "red"); Assert.AreEqual(3, wins[CamelColor.Yellow], "yellow"); }
public void Unit_State_DiceThrow_Trap3() { // 1: blue, green, white | trap | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 1,1 1,2 3,3 3,4"); var gamestate = new ImplementedGameState(2, startingPositions, 16, 3); gamestate.Traps[0].Location = 2; gamestate.Traps[0].Move = -1; var change = new DiceThrowStateChange(0, CamelColor.Green, 1); // 1: green, white, BLUE | trap | 3: red, yellow gamestate.Apply(change); Assert.AreEqual("1,2 1,0 1,1 3,3 3,4", gamestate.CamelPositionToString(), "Camel positions"); Assert.AreEqual(5, gamestate.Money[0], "money"); }
public void CamelHelper_GetallGameStates_Depth_0() { // 1: blue, green, white | 2: red, yellow var startString = "1,0 1,1 1,2 2,3 2,4"; var startingPositions = TestHelper.ConvertToStartingPositions(startString); var gamestate = new ImplementedGameState(1, startingPositions); var states = gamestate.GetAllGameEndStates(0); Assert.AreEqual(15, states.Count, "final states"); var positions = states.Select(CamelsToString).ToList(); foreach (var pos in _depth0Positions) { Assert.IsTrue(positions.Contains(pos), "Can't find state: " + pos); } }
public void RulesEngine_PickCard_Valid5() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(2, startingPositions); var engine = new RulesEngine(gamestate, seed: 2); var change = engine.Getchange(0, new PlayerAction() { CamelAction = CamelAction.PickCard, Color = CamelColor.Red }) as PickCardStateChange; Assert.IsTrue(change != null, "is pick card"); Assert.AreEqual(CamelColor.Red, change.Color, "card color"); Assert.AreEqual(0, change.Player, "player"); Assert.AreEqual(5, change.Value, "card value"); }
public void RulesEngine_PlacePluss_ValidSpace() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(2, startingPositions); var engine = new RulesEngine(gamestate, seed: 2); var change = engine.Getchange(1, new PlayerAction() { CamelAction = CamelAction.PlacePlussTrap, Value = 4 }) as PlussTrapStateChange; Assert.IsTrue(change != null, "is valid"); Assert.AreEqual(1, change.Player); Assert.AreEqual(4, change.Value); }
public void RulesEngine_BetOnWinner_Valid() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(2, startingPositions); var engine = new RulesEngine(gamestate, seed: 2); var change = engine.Getchange(1, new PlayerAction() { CamelAction = CamelAction.SecretBetOnWinner, Color = CamelColor.Green }) as WinnerBetStateChange; Assert.IsTrue(change != null, "is valid"); Assert.AreEqual(1, change.Player, "player"); Assert.AreEqual(CamelColor.Green, change.Color, "bet on green"); }
public void Unit_State_PickCard_Twice() { // 1: blue, green, white | 2: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 1,1 1,2 2,3 2,4"); var gamestate = new ImplementedGameState(2, startingPositions, 16, 3); gamestate.Apply(new PickCardStateChange(0, CamelColor.Blue, 5)); gamestate.Apply(new PickCardStateChange(0, CamelColor.Blue, 3)); var c5 = gamestate.BettingCards.First(x => x.Value == 5 && x.CamelColor == CamelColor.Blue).Owner; var c3 = gamestate.BettingCards.First(x => x.Value == 3 && x.CamelColor == CamelColor.Blue).Owner; var c2 = gamestate.BettingCards.First(x => x.Value == 2 && x.CamelColor == CamelColor.Blue).Owner; Assert.AreEqual(0, c5, "blue 5 owner"); Assert.AreEqual(0, c3, "blue 3 owner"); Assert.AreEqual(-1, c2, "blue 2 owner"); }
public void Unit_State_PickCard() { // 1: blue, green, white | 2: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 1,1 1,2 2,3 2,4"); var gamestate = new ImplementedGameState(2, startingPositions, 16, 3); var change = new PickCardStateChange(0, CamelColor.Blue, 5); gamestate.Apply(change); var owner = gamestate.BettingCards.Where(x => x.Value == 5).ToDictionary(x => x.CamelColor, x => x.Owner); Assert.AreEqual(0, owner[CamelColor.Blue], "blue 5 owner"); Assert.AreEqual(-1, owner[CamelColor.Green], "green 5 owner"); Assert.AreEqual(-1, owner[CamelColor.White], "white 5 owner"); Assert.AreEqual(-1, owner[CamelColor.Red], "red 5 owner"); Assert.AreEqual(-1, owner[CamelColor.Yellow], "yellow 5 owner"); }
public void RulesEngine_ScoreRound_Bets_SecondPlace() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(4, startingPositions); gamestate.BettingCards.First(x => x.CamelColor == CamelColor.Red && x.Value == 5).Owner = 0; gamestate.BettingCards.First(x => x.CamelColor == CamelColor.Red && x.Value == 3).Owner = 1; gamestate.BettingCards.First(x => x.CamelColor == CamelColor.Red && x.Value == 2).Owner = 2; var engine = new RulesEngine(gamestate, seed: 1); engine.ScoreRound(); Assert.AreEqual(4, gamestate.Money[0], "money p0"); Assert.AreEqual(4, gamestate.Money[1], "money p1"); Assert.AreEqual(4, gamestate.Money[2], "money p2"); Assert.AreEqual(3, gamestate.Money[3], "money p3"); }
public void RulesEngine_BetOnWinner_Invalid_Self() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(2, startingPositions); gamestate.LoserBets.Add(new GameEndBet() { Player = 1, CamelColor = CamelColor.Green }); var engine = new RulesEngine(gamestate, seed: 2); var change = engine.Getchange(1, new PlayerAction() { CamelAction = CamelAction.SecretBetOnWinner, Color = CamelColor.Green }); Assert.IsTrue(change == null, "is invalid"); }
public void RulesEngine_ScoreGame_WrongBets() { // 1: blue | 2: green, white | 3: red, yellow var startingPositions = TestHelper.ConvertToStartingPositions("1,0 2,1 2,2 3,3 3,4"); var gamestate = new ImplementedGameState(4, startingPositions); gamestate.LoserBets.Add(new GameEndBet() { Player = 0, CamelColor = CamelColor.Green }); gamestate.LoserBets.Add(new GameEndBet() { Player = 0, CamelColor = CamelColor.White }); gamestate.LoserBets.Add(new GameEndBet() { Player = 0, CamelColor = CamelColor.Red }); gamestate.LoserBets.Add(new GameEndBet() { Player = 1, CamelColor = CamelColor.White }); gamestate.LoserBets.Add(new GameEndBet() { Player = 1, CamelColor = CamelColor.Red }); gamestate.LoserBets.Add(new GameEndBet() { Player = 2, CamelColor = CamelColor.Red }); var engine = new RulesEngine(gamestate, seed: 1); engine.ScoreGame(); Assert.AreEqual(0, gamestate.Money[0], "money p0"); Assert.AreEqual(1, gamestate.Money[1], "money p1"); Assert.AreEqual(2, gamestate.Money[2], "money p2"); Assert.AreEqual(3, gamestate.Money[3], "money p3"); }
public void CamelHelper_GetCamelWins_Full_MinusTrap() { // 1: blue, green, white | 2: red, yellow var startString = "1,0 1,1 1,2 2,3 2,4"; var startingPositions = TestHelper.ConvertToStartingPositions(startString); var gamestate = new ImplementedGameState(1, startingPositions); gamestate.Traps[0].Location = 3; gamestate.Traps[0].Move = -1; var wins = CamelHelper.GetCamelWins(gamestate, out var money); Assert.AreEqual(3086, wins[CamelColor.Blue], "blue"); Assert.AreEqual(5240, wins[CamelColor.Green], "green"); Assert.AreEqual(8834, wins[CamelColor.White], "white"); Assert.AreEqual(3251, wins[CamelColor.Red], "red"); Assert.AreEqual(8749, wins[CamelColor.Yellow], "yellow"); Assert.AreEqual(38500, money[3], "trap money"); }
public void CamelHelper_GetCamelWins_SimpleWin_TrapPlus() { // 1: blue, green, white | 4: red, yellow var startString = "1,0 1,1 1,2 4,3 4,4"; var startingPositions = TestHelper.ConvertToStartingPositions(startString); var gamestate = new ImplementedGameState(1, startingPositions); gamestate.Traps[0].Location = 3; gamestate.Traps[0].Move = 1; gamestate.RemainingDice.RemoveAll(x => x != CamelColor.Green); var wins = CamelHelper.GetCamelWins(gamestate, out var money); Assert.AreEqual(0, wins[CamelColor.Blue], "blue"); Assert.AreEqual(0, wins[CamelColor.Green], "green"); Assert.AreEqual(2, wins[CamelColor.White], "white"); Assert.AreEqual(0, wins[CamelColor.Red], "red"); Assert.AreEqual(1, wins[CamelColor.Yellow], "yellow"); Assert.AreEqual(1, money[3], "trap money"); }