/// <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); } }
/// <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); } }
/// <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); } }