예제 #1
0
        private void UpdateCastles(CastlesModel castle)
        {
            var index = Castles.IndexOf(castle);

            Castles.Remove(castle);
            Castles.Insert(index, castle);
        }
예제 #2
0
 public CastleByDistanceModel GetNearestCastle(List <string> castles, double lat, double lng)
 {
     return(Castles.Where(c => castles.Contains(c.Id)).Select(c => new CastleByDistanceModel
     {
         Castle = c,
         Distance = MapHelpers.GetDistance(c.Position.Lat, c.Position.Lng, lat,
                                           lng)
     }).OrderBy(d => d.Distance).First());
 }
예제 #3
0
        static void Main(string[] args)
        {
            List <Transformer> trasformersList = new List <Transformer>
            {
                new Transformer()
                {
                    Type         = TransformerType.Decepticon,
                    Name         = "Soundwave",
                    Strength     = 8,
                    Intelligence = 9,
                    Speed        = 2,
                    Endurance    = 6,
                    Rank         = 7,
                    Courage      = 5,
                    Firepower    = 6,
                    Skill        = 10
                },
                new Transformer()
                {
                    Type         = TransformerType.Autobot,
                    Name         = "Bluestreak",
                    Strength     = 6,
                    Intelligence = 6,
                    Speed        = 7,
                    Endurance    = 9,
                    Rank         = 5,
                    Courage      = 2,
                    Firepower    = 9,
                    Skill        = 7
                },
                new Transformer()
                {
                    Type         = TransformerType.Autobot,
                    Name         = "Hubcap",
                    Strength     = 4,
                    Intelligence = 4,
                    Speed        = 4,
                    Endurance    = 4,
                    Rank         = 4,
                    Courage      = 4,
                    Firepower    = 4,
                    Skill        = 4
                },
            };

            var gameScore = new GameService().ComputeScore(trasformersList);

            System.Console.WriteLine($"{gameScore.Battles} battle");
            System.Console.WriteLine($"Winning team ({gameScore.WinningTeam}): {string.Join(",", trasformersList.Where(x=>x.Type==gameScore.WinningTeam).Select(x=>x.Name))}");
            System.Console.WriteLine($"Survivors from the losing team ({gameScore.LosingTeam}):{string.Join(",", gameScore.Survivors)}");

            int[] A      = new int[] { 2, 6, 6, 1, 4, 2, 2, 1 };
            int   result = Castles.Solution(A);

            System.Console.Write(result);
            System.Console.Read();
        }
예제 #4
0
        public List <string> GetOpponentCastlesId()
        {
            var myArmy = GetMyArmy();

            return(Castles.Where(e => e.Army != myArmy).Select(e => e.Id).ToList());
        }
예제 #5
0
        public List <CastleStateModel> GetMyCastles()
        {
            var myArmy = GetMyArmy();

            return(Castles.Where(e => e.Army == myArmy).ToList());
        }
예제 #6
0
        /// <summary>
        /// Инициализация героев замка
        /// </summary>
        public void GenerateUnits()
        {
            var names = Castles.SelectMany(castle => castle.GetAvailableUnits()).ToArray();

            var randomUnits = new Random();

            bool generationDone;

            do
            {
                HeroUnits.Clear();

                for (int aUnit = 0; aUnit < randomUnits.Next(GameSettings.nMinUnitsCount, GameSettings.nMaxUnitsCount); aUnit++)
                {
                    HeroUnits.Add(new HeroUnit(Castles, names[randomUnits.Next(0, names.Count())]));
                }

                generationDone = true;

                foreach (var unitsByCastle in HeroUnits.GroupBy(unit => unit.Home))
                {
                    var unitsByCastlesCount = unitsByCastle.Count();
                    if (unitsByCastlesCount < GameSettings.nMinPerGroup)
                    {
                        generationDone = false;
                        /*неудачый random*/
                        StatusReporter.WriteLine($"В замке {unitsByCastle.Key} недобор героев. невозможно сформировать ни одного отряда.");

                        do
                        {
                            StatusReporter.WriteLine($"переукомплектовать героев заново? (да/нет)");
                            var userDecision = ExpressionWorker.GetUserYesNoDecision(UserInput);

                            if (userDecision == UserDecision.N)
                            {
                                StatusReporter.WriteLine($"игра завершена");
                                HeroUnits.Clear();
                                return;
                            }

                            if (userDecision == UserDecision.Y)
                            {
                                break;
                            }
                        } while (true);
                    }

                    if (generationDone == false)
                    {
                        break;
                    }
                }
            } while (generationDone == false);

            HeroUnits.InitHeroParameters();
            HeroUnits.FillGroups(GameSettings.nMinPerGroup, GameSettings.nMaxPerGroup);

            StatusReporter.WriteLine("Для битвы доступны следующие замки с укомплектованными героями.");

            foreach (var castle in Castles.OrderBy(castle => castle.Name))
            {
                HeroUnits.ByCastle(castle).ShowNamesGroup(StatusReporter);
            }

            do
            {
                StatusReporter.Write($"Выберите замок ({Castles.Select(castle => castle.ToString()).Aggregate((c, v) => $"{c}/{v}")}) : ");
                var userCastleName = ExpressionWorker.GetUserCastleDecision(UserInput);
                var userCastle     = Castles.Find(castle => castle.Equals(new Castle(userCastleName)));
                if (userCastle != null)
                {
                    StatusReporter.WriteLine($"В Вашем расположении будут воевать герои замка {userCastle}");
                    userCastle.Owner = CastleOwner.User;
                    break;
                }

                StatusReporter.WriteLine($"выбор не определён");
            } while (true);

            DoBattleAction();
        }