示例#1
0
        /// <summary>
        ///     Функция формирования своей команды
        /// </summary>
        /// <param name="score">Оставшиеся очки</param>
        /// <param name="squad">Комнда</param>
        public new static void AskForCount(ref float score, SucideSquad squad)
        {
            int Count;

            Console.Write("Введите количество самураев: ");
            if (Program.CheckInput(Console.ReadLine(), out Count) && Count >= 0)
            {
                if (score - (Count * cost) >= 0 && squad.Length - squad.FindLastNull() - 1 >= 0)
                {
                    squad.AddFighters(SucideSquad.FighterType.Samurai, Count);
                    score -= Count * cost;
                }
                else if (squad.Length - squad.FindLastNull() - 1 < 0)
                {
                    Console.WriteLine("В команде нету столько места.");
                    AskForCount(ref score, squad);
                }
                else if (score - (Count * cost) < 0)
                {
                    Console.WriteLine("Не хватает очков. Осталось: " + score);
                    AskForCount(ref score, squad);
                }
            }
            else
            {
                Console.WriteLine("Число должно быть целым неотритцательным.");
                AskForCount(ref score, squad);
            }
        }
示例#2
0
 /// <summary>
 ///     Функция очистки команды
 /// </summary>
 /// <param name="squad"></param>
 public static void ClearSquad(ref SucideSquad squad)
 {
     try
     {
         squad = new SucideSquad(FightersCount, squad.isPlayerSquad);
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
     }
 }
示例#3
0
        /// <summary>
        ///     Процесс битвы
        /// </summary>
        private static void Battle()
        {
            Console.WriteLine("Нажмите на Enter чтобы начать первый ход.");
            Console.ReadKey();

            try
            {
                // Ход
                int turn = 0;
                // Определение первого хода
                int whoFirst = rnd.Next(0, 2);
                // Массив из двух команд
                SucideSquad[] squads = new SucideSquad[] { PlayerSquad, EnemySquad };

                // Индексы для поочередного перебора
                int k1 = 0, k2 = 0;
                // Временная переменная
                int l = 0;
                // Цикл до окончания игры
                while (PlayerSquad.LastAlive() != 0 && EnemySquad.LastAlive() != 0)
                {
                    // Очистка консоли
                    Console.Clear();
                    if (l == 0)
                    {
                        l = 1;
                        Console.WriteLine(whoFirst == 0 ? "Вы ходите первым!" : "Противник ходит первым!");
                    }
                    turn++;
                    Console.WriteLine("Ход " + turn);

                    // Первая команда атакует
                    while (squads[whoFirst][k1] == null || !squads[whoFirst][k1].isAlive)
                    {
                        k1++;
                        k1 = k1 % squads[whoFirst].FindLastNull();
                    }
                    int targetIndex = 0;
                    FirstAttack(squads, whoFirst, k1, ref targetIndex);
                    // Исключение когда последний боец в противоположной команде умирает
                    if (PlayerSquad.LastAlive() == 0 || EnemySquad.LastAlive() == 0)
                    {
                        Console.Write(Environment.NewLine);
                        PlayerSquad.Display();
                        EnemySquad.Display();
                        Console.ReadKey();
                        break;
                    }
                    // Вторая команда атакует
                    while (squads[whoFirst == 0 ? 1 : 0][k2] == null || !squads[whoFirst == 0 ? 1 : 0][k2].isAlive)
                    {
                        k2++;
                        k2 = k2 % squads[whoFirst == 0 ? 1 : 0].FindLastNull();
                    }
                    SecondAttack(squads, whoFirst, k2, ref targetIndex);

                    // Окончание боя и вывод команд на экран
                    Console.Write(Environment.NewLine);
                    PlayerSquad.Display();
                    EnemySquad.Display();
                    k1++;
                    k1 = k1 % squads[whoFirst].FindLastNull();
                    k2++;
                    k2 = k2 % squads[whoFirst == 0 ? 1 : 0].FindLastNull();
                    Console.ReadKey();
                }

                // Проверки на исход битвы
                if (PlayerSquad.LastAlive() == 0 && EnemySquad.LastAlive() != 0)
                {
                    Console.Write("Вы ");
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write("проиграли");
                    Console.ResetColor();
                    Console.WriteLine("! Ваша команда полностью уничтожена!");
                    return;
                }
                if (EnemySquad.LastAlive() == 0 && PlayerSquad.LastAlive() != 0)
                {
                    Console.Write("Вы ");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Write("победили");
                    Console.ResetColor();
                    Console.WriteLine("! Команда противника полностью уничтожена!");
                    return;
                }
                else
                {
                    Console.WriteLine("Ничья! Каким-то чудесным образом они убили друг друга! \nВероятно последний самурай совершил харакири. Отличный получился бы фильм!");
                }
            }
            catch (Exception e) // Отлавливание ошибок
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.Source);
                Console.WriteLine(e.StackTrace);
            }
        }