Пример #1
0
            public MovementGrade GetTopGradedMovement(ColorCrazePlayerInfo playerInfo, Dictionary <int, Point> playersLocationMap)
            {
                var scores   = new Dictionary <ITurnStrategy, MovementGrade>();
                var maxGrade = 0;

                foreach (var strategy in strategies)
                {
                    var gradedMovement = strategy.Grade(playerInfo, playersLocationMap);
                    scores.Add(strategy, gradedMovement);
                    maxGrade = maxGrade < gradedMovement.Grade ? gradedMovement.Grade : maxGrade;
                }

                var movement = scores.First(i => i.Value.Grade == maxGrade).Value;

                return(movement);
            }
Пример #2
0
            public MovementGrade Grade(ColorCrazePlayerInfo playerInfo, Dictionary <int, Point> playersLocationMap)
            {
                var fromLocation      = playerInfo.CurrentLocation;
                var occupiedLocations = playersLocationMap.Values.ToList();
                var numberOfPlayers   = occupiedLocations.Count;

                if (numberOfPlayers == 1)
                {
                    return(new MovementGrade(fromLocation, 100));
                }

                var turnSimulator = new TurnSimulator(this.board);
                var gradeStep     = 100 / (numberOfPlayers - 1); //step in %

                var maxGradedMovement = new MovementGrade(fromLocation, 0);

                foreach (var direction in this.directions)
                {
                    var grade        = 0;
                    var nextLocation = fromLocation;
                    for (var i = 0; i < numberOfPlayers - 1; i++)
                    {
                        nextLocation = turnSimulator.Simulate(occupiedLocations, nextLocation, direction);
                        var square  = board.Squares[nextLocation.X, nextLocation.Y] as ColorCrazeGridSquare;
                        var isOwned = square.Owner == playerInfo.ID;
                        if (nextLocation != fromLocation && !isOwned)
                        {
                            grade += gradeStep;
                            var nextMovement = new MovementGrade(nextLocation, grade, direction);
                            maxGradedMovement = maxGradedMovement.Grade < grade ? nextMovement : maxGradedMovement;
                        }
                    }
                }

                return(maxGradedMovement);
            }
Пример #3
0
 private Point PlayerToPoint(ColorCrazePlayerInfo player)
 {
     return(player.CurrentLocation);
 }