Exemple #1
0
        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");
        }
Exemple #2
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
            });
        }
Exemple #3
0
        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}");
            }
        }
Exemple #4
0
        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");
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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");
        }
Exemple #11
0
        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
            });
        }
Exemple #12
0
        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]));
        }
Exemple #13
0
 public void StartNewGame(int playerId, GameInfo info, GameState gameState)
 {
     _me = playerId;
     BetCardsRemaining = CamelHelper.GetAllCamelColors();
 }