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 PlayerAction GetAction(GameState gameState) { var camelWins = CamelHelper.GetCamelWins(gameState, out var money, 5); var sum = (double)camelWins.Sum(x => x.Value); var probability = camelWins.ToDictionary(x => x.Key, x => x.Value / sum); var bettingCards = gameState.BettingCards .GroupBy(x => x.CamelColor) .ToDictionary(x => x.Key, y => y.Where(x => x.IsFree).Select(x => x.Value).DefaultIfEmpty(0).Max()); var bets = probability.ToDictionary(x => x.Key, x => x.Value * bettingCards[x.Key]); var bestBet = bets.OrderByDescending(x => x.Value).First(); if (bestBet.Value > 1.0) { return(new PlayerAction() { CamelAction = CamelAction.PickCard, Color = bestBet.Key }); } return(new PlayerAction() { CamelAction = CamelAction.ThrowDice }); }
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_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 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_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 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 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"); }
public PlayerAction GetAction(GameState gameState) { if (gameState.Traps[_me].Location == -1) { var heatmap = CamelHelper.GetLocationHeatmap(gameState, 4); foreach (var location in heatmap.Where(x => x.Value > 1).OrderByDescending(x => x.Value).Select(x => x.Key)) { if (gameState.IsValidTrapSpace(_me, location)) { return(new PlayerAction() { CamelAction = CamelAction.PlaceMinusTrap, Value = location }); } } } return(new PlayerAction() { CamelAction = CamelAction.ThrowDice }); }
public static Dictionary <CamelColor, Position> ConvertToStartingPositions(string startingPositions) { var positions = startingPositions.Split(' ').Select(x => new Position(int.Parse(x.Split(',')[0]), int.Parse(x.Split(',')[1]))).ToArray(); return(CamelHelper.GetAllCamelColors().ToDictionary(x => x, x => positions[(int)x])); }
public void StartNewGame(int playerId, GameInfo info, GameState gameState) { _me = playerId; BetCardsRemaining = CamelHelper.GetAllCamelColors(); }