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); }
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); }
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); }
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); }); }
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); }
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; }