public override ColorCrazeDecision PlayTurn(List <ColorCrazePlayerInfo> allPlayers, Board.Board board) { // I suck at this game var action = new ColorCrazeDecision(Point.Empty); return(action); }
public override ColorCrazeDecision PlayTurn(List <ColorCrazePlayerInfo> allPlayers, Board.Board board) { Update(allPlayers, board as ColorCrazeBoard.ColorCrazeBoard); var action = new ColorCrazeDecision(GetBestMove()); return(action); }
public override ColorCrazeDecision PlayTurn(List <ColorCrazePlayerInfo> allPlayers, Board.Board board) { var directions = Enum.GetValues(typeof(ColorCrazeDirection)); var randomDir = (ColorCrazeDirection)directions.GetValue(r.Next(directions.Length)); var action = new ColorCrazeDecision(randomDir); return(action); }
public override ColorCrazeDecision PlayTurn(List <ColorCrazePlayerInfo> allPlayers, Board.Board board) { //We dont went to go on these points ... List <Point> badPoints = new List <Point>(); var myInfo = ((ColorCrazePlayerInfo)GetInfo()); Point actualPosition = myInfo.CurrentLocation; //For all the player, we do something... foreach (ColorCrazePlayerInfo player in allPlayers) { badPoints.Add(player.CurrentLocation); } var colorBoard = (ColorCrazeBoard.ColorCrazeBoard)board; var playerColor = GetInfo().PlayerColor; //Right Point right = new Point(actualPosition.X + 1, actualPosition.Y); if (!badPoints.Contains(right) && this.pointToContest.Contains(right) && (colorBoard.Squares[right.X, right.Y] as ColorCrazeGridSquare).Owner != GetInfo().ID) { return(new ColorCrazeDecision(ColorCrazeDirection.Right)); } //Up Point up = new Point(actualPosition.X, actualPosition.Y - 1); if (!badPoints.Contains(up) && this.pointToContest.Contains(up) && (colorBoard.Squares[up.X, up.Y] as ColorCrazeGridSquare).Owner != GetInfo().ID) { return(new ColorCrazeDecision(ColorCrazeDirection.Up)); } //Left Point left = new Point(actualPosition.X - 1, actualPosition.Y); if (!badPoints.Contains(left) && this.pointToContest.Contains(left) && (colorBoard.Squares[left.X, left.Y] as ColorCrazeGridSquare).Owner != GetInfo().ID) { return(new ColorCrazeDecision(ColorCrazeDirection.Left)); } //Bottom Point down = new Point(actualPosition.X, actualPosition.Y + 1); if (!badPoints.Contains(down) && this.pointToContest.Contains(down) && (colorBoard.Squares[down.X, down.Y] as ColorCrazeGridSquare).Owner != GetInfo().ID) { return(new ColorCrazeDecision(ColorCrazeDirection.Down)); } //Default var directions = Enum.GetValues(typeof(ColorCrazeDirection)); var randomDir = (ColorCrazeDirection)directions.GetValue(new Random().Next(directions.Length)); var action = new ColorCrazeDecision(randomDir); return(action); }
public override ColorCrazeDecision PlayTurn(List <ColorCrazePlayerInfo> allPlayers, Board.Board board) { var myX = ((ColorCrazePlayerInfo)Info).CurrentLocation.X; var myY = ((ColorCrazePlayerInfo)Info).CurrentLocation.Y; var enemies = _boardAnalysis.AnalyzeBoard((ColorCrazeBoard.ColorCrazeBoard)board, myX, myY); var nextMoves = _boardAnalysis.GetPossibleMoves((ColorCrazeBoard.ColorCrazeBoard)board, allPlayers, myX, myY); var direction = _turnAdviser.AdviceNextTurn(enemies, nextMoves); var action = new ColorCrazeDecision(direction); return(action); }
public override ColorCrazeDecision PlayTurn(List <ColorCrazePlayerInfo> allPlayers, Board.Board board) { var gridBoard = (ColorCrazeBoard.ColorCrazeBoard)board; var currentLocation = GetInfo().CurrentLocation; var possibleDirections = new List <ColorCrazeDirection>(); var actionsWithScore = new Dictionary <ColorCrazeDirection, int>(); // A drette actionsWithScore.Add(ColorCrazeDirection.Right, GetScoreForDirection(allPlayers, gridBoard, currentLocation.X + 1, currentLocation.Y)); // A goche actionsWithScore.Add(ColorCrazeDirection.Left, GetScoreForDirection(allPlayers, gridBoard, currentLocation.X - 1, currentLocation.Y)); // en O actionsWithScore.Add(ColorCrazeDirection.Up, GetScoreForDirection(allPlayers, gridBoard, currentLocation.X, currentLocation.Y - 1)); // en Ba actionsWithScore.Add(ColorCrazeDirection.Down, GetScoreForDirection(allPlayers, gridBoard, currentLocation.X, currentLocation.Y + 1)); foreach (KeyValuePair <ColorCrazeDirection, int> item in actionsWithScore.OrderBy(key => key.Value)) { if (item.Value != -1) { possibleDirections.Add(item.Key); } } ColorCrazeDecision action; if (possibleDirections.Count > 0 && actionsWithScore.TryGetValue(possibleDirections.Last(), out int value)) { if (value != 0) { action = new ColorCrazeDecision(possibleDirections.Last()); } else { action = getOutOfThereBot(gridBoard, possibleDirections); } } else { action = new ColorCrazeDecision(new Point(0, 0)); } return(action); }
public override ColorCrazeDecision PlayTurn(List <ColorCrazePlayerInfo> allPlayers, Board.Board board) { // Si on we don't have a current direction, we choose one at random if (currentDirection == Point.Empty) { var choice1 = 1; if (r.Next(0, 2) == 0) { choice1 = -1; } var choice2 = 1; if (r.Next(0, 2) == 0) { choice2 = -1; } currentDirection = new Point(choice1, choice2); } // We check if we managed to move last turn if (lastPosition.X == GetInfo().CurrentLocation.X&& lastPosition.Y == GetInfo().CurrentLocation.Y) { // We failed, let's turn var choice1 = 1; if (r.Next(0, 2) == 0) { choice1 = -1; } if (currentDirection.X != 0) { currentDirection = new Point(0, choice1); } else { currentDirection = new Point(choice1, 0); } } // Let's remember our position lastPosition = GetInfo().CurrentLocation; var action = new ColorCrazeDecision(currentDirection); return(action); }
public override ColorCrazeDecision PlayTurn(List <ColorCrazePlayerInfo> allPlayers, Board.Board board) { var colorBoard = (ColorCrazeBoard.ColorCrazeBoard)board; // Distance la plus courte vers une case vide trouvée (ici aucune) var minDistance = (colorBoard.Width * 2) + 1; // Position de la case vide la plus proche (pour l'instant aucune) var target = GetInfo().CurrentLocation; // On parcoure les deux dimensions du board for (var x = 0; x < colorBoard.Width; x++) { for (var y = 0; y < colorBoard.Height; y++) { // Si la case est vide if (((ColorCrazeGridSquare)(colorBoard.Squares[x, y])).Owner == -1) { // On teste la distance entre la case et nous-même var distance = GetDistance(GetInfo().CurrentLocation.X, GetInfo().CurrentLocation.Y, x, y); // Si elle est plus proche que la plus proche trouvée à date if (distance < minDistance) { // On note sa distance comme la plus proche à date minDistance = distance; //On note la position de la case target = new Point(x, y); } } } } var possibleDirections = new List <ColorCrazeDirection>(); if (target.X > GetInfo().CurrentLocation.X) { possibleDirections.Add(ColorCrazeDirection.Right); } else if (target.X < GetInfo().CurrentLocation.X) { possibleDirections.Add(ColorCrazeDirection.Left); } if (target.Y > GetInfo().CurrentLocation.Y) { possibleDirections.Add(ColorCrazeDirection.Down); } else if (target.Y < GetInfo().CurrentLocation.Y) { possibleDirections.Add(ColorCrazeDirection.Up); } if (possibleDirections.Any()) { return(new ColorCrazeDecision(possibleDirections[r.Next(0, possibleDirections.Count)])); } else { var directions = Enum.GetValues(typeof(ColorCrazeDirection)); var randomDir = (ColorCrazeDirection)directions.GetValue(r.Next(directions.Length)); var action = new ColorCrazeDecision(randomDir); return(action); } }