Esempio n. 1
0
 public static void GetCastleStatistics(this Units units, IStatusReporter statusReporter)
 {
     statusReporter.WriteLine($"общая сила замка {units.UnitsOperatoin.GetDamage()}");
     statusReporter.WriteLine($"общая защита замка {units.UnitsOperatoin.GetProtectionLevel()}");
     foreach (var unitGroup in units.GroupBy(unit => unit.GroupIndex))
     {
         statusReporter.WriteLine($"группировка {unitGroup.First().GroupIndex}");
         statusReporter.WriteLine($"общая сила {units.UnitsOperatoin.GetDamageGroup(unitGroup.First().GroupIndex)}");
         statusReporter.WriteLine($"общая защита {units.UnitsOperatoin.GetGroupProtectionLevel(unitGroup.First().GroupIndex)}");
     }
 }
Esempio n. 2
0
        /// <summary>
        /// Отображает содержание по группировкам (замок, группы)
        /// </summary>
        /// <param name="statusReporter"></param>
        public void ShowNamesGroup(IStatusReporter statusReporter)
        {
            statusReporter.WriteLine($"Замок {this.First().Home}");
            statusReporter.WriteLine($"воинов {Count}");

            var unitsGroups = this.ToLookup(unit => unit.GroupIndex);

            statusReporter.WriteLine($"Группировок в замке {unitsGroups.Count()}");

            foreach (var unitGroup in unitsGroups.OrderBy(ug => ug.Key))
            {
                statusReporter.WriteLine($"{unitGroup.Key}) {unitGroup.Select(unit => unit.ToString()).Aggregate((u,g) => $"{u}, {g}")}");
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Действие сцены
        /// </summary>
        public void Scene(IUserInput userInput, IStatusReporter statusReporter)
        {
            BattleActionHistory = new List <DoBattleAction>();
            BattleActions       = new Dictionary <UserCommand, DoBattleAction>()
            {
                { UserCommand.Attack, Attack },
                { UserCommand.GiveUp, GiveUp },
                { UserCommand.GetStat, GetStat },
                { UserCommand.NoCommand, Boo }
            };

            for ( ; ;)
            {
                foreach (var castle in Castles)
                {
                    UserCommand userCommand = UserCommand.Attack;
                    if (!IsAction)
                    {
                        return;
                    }

                    do
                    {
                        statusReporter.WriteLine($"ход героев замка {castle} ({Utils.EnumValueToString<CastleOwner>(castle.Owner)})");

                        if (castle.Owner == CastleOwner.User)
                        {
                            userCommand = userInput.GetUserCommand(statusReporter);
                            statusReporter.Clear();
                        }
                        /*пользователь будет делать ходы, пока функция не вернёт false*/
                    }while(BattleActions[userCommand](Units, Units, statusReporter));
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Замок признаёт поражение
        /// </summary>
        /// <param name="attackGroup"></param>
        /// <param name="enemyGroup"></param>
        /// <param name="statusReporter"></param>
        /// <returns>возврат - повторить ход</returns>
        public bool GiveUp(Units attackGroup, Units enemyGroup, IStatusReporter statusReporter)
        {
            statusReporter.WriteLine($"Замок {attackGroup.First().Home} признаёт поражение.");
            foreach (var defeatUnit in Units.ByCastle(attackGroup.First().Home))
            {
                defeatUnit.Life = 0;
            }

            return(false);
        }
Esempio n. 5
0
        /// <summary>
        /// Атака одной группы героев на другую
        /// </summary>
        /// <param name="attackGroup"></param>
        /// <param name="enemyGroup"></param>
        /// <param name="statusReporter"></param>
        /// <returns>возврат - повторить ход</returns>
        public bool Attack(Units attackGroup, Units enemyGroup, IStatusReporter statusReporter)
        {
            if (attackGroup.First().GroupIndex == enemyGroup.First().GroupIndex)
            {
                statusReporter.WriteLine("Нельзя нанести урон самому себе");
                return(false);
            }

            var damage = attackGroup.UnitsOperatoin.GetDamage();

            enemyGroup.ForEach((enemyGroupUnit) => {
                enemyGroupUnit.GetDamage(damage);
            });

            /*Можно дать имена группам и транслировать их тут*/
            /*можно поменять способ доступа к транслятору имён - как удобно*/
            statusReporter.WriteLine($"герои группы {attackGroup.GroupNamesTranslator[attackGroup.First().GroupIndex]} нанесли урон героям группы {enemyGroup.GroupNamesTranslator[enemyGroup.First().GroupIndex]}.");
            if (enemyGroup.All(enemyUnit => false == enemyUnit.IsHeartBeat))
            {
                statusReporter.WriteLine($"замок {enemyGroup.First().Home} теряет группу {enemyGroup.GroupNamesTranslator[enemyGroup.First().GroupIndex].Replace($"({enemyGroup.First().Home})", "").ClearSpaces()}");
            }

            return(false);
        }
Esempio n. 6
0
        public UserCommand GetUserCommand(IStatusReporter statusReporter)
        {
            statusReporter.WriteLine("Введите комманду");

            switch (Console.ReadKey().Key)
            {
            case ConsoleKey.A:
                return(UserCommand.Attack);

            case ConsoleKey.S:
                return(UserCommand.GetStat);

            case ConsoleKey.U:
                return(UserCommand.GiveUp);

            default:
                return(UserCommand.NoCommand);
            }
        }
Esempio n. 7
0
 /// <summary>
 /// Игра в поддавки
 /// </summary>
 /// <param name="attackGroup"></param>
 /// <param name="enemyGroup"></param>
 /// <param name="statusReporter"></param>
 /// <returns>возврат - повторить ход</returns>
 public bool Boo(Units attackGroup, Units enemyGroup, IStatusReporter statusReporter)
 {
     statusReporter.WriteLine($"замок {attackGroup.First().Home} пропускает ход.");
     return(false);
 }