// Дает копам разрешить дело // Повышает ранг и перераспределяет их, если они справились // Выводит сообщение о неудаче, если они не справились 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"); }
// Дает копу и его боссам решить дело public Cop SolveCase() { // Бросок кубика на решение дела if (rnd.Next(18) <= rank) { // Дело решено, считаем его, сообщаем об этом и возвращаем себя solvedCases++; Console.WriteLine("{0,-14} ({1}): solved!", name, rank); return(this); } else { // Дело не решено, считаем его, сообщаем об этом и даем решить его боссу или его боссу и т.д. пока босс есть failedCases++; Console.WriteLine("{0,-14} ({1}): failed", name, rank); return(boss?.SolveCase()); } }