示例#1
0
        public override ColorCrazeDecision PlayTurn(List <ColorCrazePlayerInfo> allPlayers, Board.Board board)
        {
            // I suck at this game
            var action = new ColorCrazeDecision(Point.Empty);

            return(action);
        }
示例#2
0
        public override ColorCrazeDecision PlayTurn(List <ColorCrazePlayerInfo> allPlayers, Board.Board board)
        {
            Update(allPlayers, board as ColorCrazeBoard.ColorCrazeBoard);

            var action = new ColorCrazeDecision(GetBestMove());

            return(action);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
            }
        }