Esempio n. 1
0
        public DirectionOfMove ChooseDirection(IntelligentSnake snake, Reward reward, Map map)
        {
            var predictedResults = _snakeAIModel.MakePredictions(PrepareInputData(snake, map));

            var direction = predictedResults.Where(p => !p.Prediction)
                            .OrderBy(p => p.Probability).ToList();

            return(direction.Any() ? (DirectionOfMove)direction.First().SuggestedDirection : DirectionOfMove.Right);
        }
Esempio n. 2
0
        private IntelligentSnake CreateIntelligentSnake()
        {
            var snakeBody = new List <SnakeElement>
            {
                new SnakeElement(10, 5, DirectionOfMove.Right),
            };
            var snake = new IntelligentSnake(snakeBody, _display);

            SetSnakeInitialLength(snake);
            return(snake);
        }
        public void ObstacleDownReturnsTrueTest()
        {
            // arrange
            var snakeBody = new List <SnakeElement>
            {
                new SnakeElement(3, 2, 0),
                new SnakeElement(3, 3, 0),
            };
            var snake = new IntelligentSnake(snakeBody, new Display());

            // act
            var actual = snake.ObstacleDown();

            // assert
            Assert.True(actual);
        }
        public void ObstacleRightReturnsFalseTest()
        {
            // arrange
            var snakeBody = new List <SnakeElement>
            {
                new SnakeElement(3, 2, 0),
                new SnakeElement(2, 2, 0),
            };
            var snake = new IntelligentSnake(snakeBody, new Display());

            // act
            var actual = snake.ObstacleRight();

            // assert
            Assert.False(actual);
        }
Esempio n. 5
0
        public void WhenObstacleDownAIDoesNotChooseToMoveDownTest()
        {
            // arrange
            var map       = new Map(10, 10);
            var snakeBody = new List <SnakeElement>
            {
                new SnakeElement(2, map.Height - 1, DirectionOfMove.Right)
            };
            var snake    = new IntelligentSnake(snakeBody, new Display());
            var snakeBot = new SnakeBot(new SnakeAIModel(), new ModelInputHelper());

            // act
            var actual = snakeBot.ChooseDirection(snake, new Reward(new Display()), map);

            // assert
            Assert.AreNotEqual(actual, DirectionOfMove.Down);
        }
Esempio n. 6
0
        public void WhenObstacleRightAndUpAIDoesNotChooseToMoveRightOrUpTest()
        {
            // arrange
            var map       = new Map(10, 10);
            var snakeBody = new List <SnakeElement>
            {
                new SnakeElement(map.Width - 1, 1, DirectionOfMove.Right)
            };
            var snake    = new IntelligentSnake(snakeBody, new Display());
            var snakeBot = new SnakeBot(new SnakeAIModel(), new ModelInputHelper());

            // act
            var actual = snakeBot.ChooseDirection(snake, new Reward(new Display()), map);

            // assert
            Assert.Multiple(() =>
            {
                Assert.AreNotEqual(actual, DirectionOfMove.Right);
                Assert.AreNotEqual(actual, DirectionOfMove.Up);
            });
        }
Esempio n. 7
0
        private IEnumerable <SnakeData> PrepareInputData(IntelligentSnake snake, Map map)
        {
            IEnumerable <SnakeData> data = new[]
            {
                new SnakeData
                {
                    SuggestedDirection = 0,
                    ObstacleUp         = Convert.ToSingle(_modelInputHelper.ObstacleUp(snake, map) || snake.ObstacleUp()),
                    ObstacleRight      = Convert.ToSingle(_modelInputHelper.ObstacleRight(snake, map) || snake.ObstacleRight()),
                    ObstacleDown       = Convert.ToSingle(_modelInputHelper.ObstacleDown(snake, map) || snake.ObstacleDown()),
                    ObstacleLeft       = Convert.ToSingle(_modelInputHelper.ObstacleLeft(snake, map) || snake.ObstacleLeft())
                },
                new SnakeData
                {
                    SuggestedDirection = 1,
                    ObstacleUp         = Convert.ToSingle(_modelInputHelper.ObstacleUp(snake, map) || snake.ObstacleUp()),
                    ObstacleRight      = Convert.ToSingle(_modelInputHelper.ObstacleRight(snake, map) || snake.ObstacleRight()),
                    ObstacleDown       = Convert.ToSingle(_modelInputHelper.ObstacleDown(snake, map) || snake.ObstacleDown()),
                    ObstacleLeft       = Convert.ToSingle(_modelInputHelper.ObstacleLeft(snake, map) || snake.ObstacleLeft())
                },
                new SnakeData
                {
                    SuggestedDirection = 2,
                    ObstacleUp         = Convert.ToSingle(_modelInputHelper.ObstacleUp(snake, map) || snake.ObstacleUp()),
                    ObstacleRight      = Convert.ToSingle(_modelInputHelper.ObstacleRight(snake, map) || snake.ObstacleRight()),
                    ObstacleDown       = Convert.ToSingle(_modelInputHelper.ObstacleDown(snake, map) || snake.ObstacleDown()),
                    ObstacleLeft       = Convert.ToSingle(_modelInputHelper.ObstacleLeft(snake, map) || snake.ObstacleLeft())
                },
                new SnakeData
                {
                    SuggestedDirection = 3,
                    ObstacleUp         = Convert.ToSingle(_modelInputHelper.ObstacleUp(snake, map) || snake.ObstacleUp()),
                    ObstacleRight      = Convert.ToSingle(_modelInputHelper.ObstacleRight(snake, map) || snake.ObstacleRight()),
                    ObstacleDown       = Convert.ToSingle(_modelInputHelper.ObstacleDown(snake, map) || snake.ObstacleDown()),
                    ObstacleLeft       = Convert.ToSingle(_modelInputHelper.ObstacleLeft(snake, map) || snake.ObstacleLeft())
                }
            };

            return(data);
        }
Esempio n. 8
0
 public AIGame(IntelligentSnake snake, Map map, GameRules gameRules, Reward reward, IDisplay display, int snakeSpeedInMilliseconds, ISnakeBot snakeBot) : base(map, gameRules, reward, display, snakeSpeedInMilliseconds)
 {
     _snake    = snake;
     _snakeBot = snakeBot;
 }