// Добавляет нового копа с указанным именем и рангом в список public void HireCop(string name, int rank) { var cop = new Cop(name, rank); cops.Add(cop); SortCops(); }
// Дает копам разрешить дело // Повышает ранг и перераспределяет их, если они справились // Выводит сообщение о неудаче, если они не справились public void SolveCase() { // Берем случайного с низшем рангом, если участок не пуст Cop cop = GetCopWithAtLeast(0); if (cop != null) { // Даем ему или его боссам решить дело cop = cop.SolveCase(); if (cop != null) { // Если один из них справился, повышаем ему ранг... if (cop.rank < 11) { cop.rank++; } // считаем дело решенным... solvedCases++; // и перераспределяем всех SortCops(cop); Console.WriteLine(""); return; } ; } ; // Иначе считаем дело нерешенным unsolvedCases++; Console.WriteLine("Case remains unsolved...\n"); }
// Сортирует копов по рангу и перераспределяет боссов // Если передать повышенного копа, перераспределяться будут только его подчененные и он сам private void SortCops(Cop promoted = null) { cops.Sort((cop1, cop2) => { return(cop1.rank > cop2.rank ? 1 : (cop1.rank < cop2.rank ? -1 : 0)); }); for (int i = 0; i < cops.Count; i++) { Cop cop = cops[i]; if (promoted == null || cop == promoted || cop.boss == promoted) { cop.boss = GetCopWithAtLeast(cop.rank + 1); } if (cop.boss == null) { break; } } }