Advertisement
SPavelA

OOPTask12Zoo

Oct 27th, 2024
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.95 KB | Gaming | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace OOPTask12Zoo
  6. {
  7.     internal class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             Zoo zoo = new Zoo();
  12.  
  13.             zoo.Work();
  14.         }
  15.     }
  16.  
  17.     public class Zoo
  18.     {
  19.         private List<Enclosure> _enclosures = new List<Enclosure>();
  20.  
  21.         public Zoo()
  22.         {
  23.             CreateEnclosures();
  24.         }
  25.  
  26.         private void CreateEnclosures()
  27.         {
  28.             const int MinimumAnimalsCount = 5;
  29.             const int MaximumAnimalsCount = 20;
  30.  
  31.             Dictionary<string, string> enclosures = new Dictionary<string, string>();
  32.             Dictionary<string, string> animals = new Dictionary<string, string>();
  33.  
  34.             enclosures.Add("клетка", "защищающая со всех сторон");
  35.             enclosures.Add("бассейн", "для животных, любящих воду");
  36.             enclosures.Add("загон", "окруженный забором");
  37.             enclosures.Add("террариум", "с особым микроклиматом");
  38.  
  39.             animals.Add("лев", "рычит");
  40.             animals.Add("тигр", "мурчит");
  41.             animals.Add("медведь", "рявкает");
  42.             animals.Add("собака", "гавкает");
  43.             animals.Add("кошка", "мяукает");
  44.             animals.Add("крокодил", "молчит");
  45.             animals.Add("осел", "и-а");
  46.             animals.Add("комар", "жузжит");
  47.             animals.Add("соловей", "поет");
  48.             animals.Add("кукушка", "врет");
  49.             animals.Add("дундук", "гонит");
  50.             animals.Add("ламер", "плачет");
  51.  
  52.             foreach (string enclosureName in enclosures.Keys)
  53.             {
  54.                 Enclosure enclosure = new Enclosure(enclosureName, enclosures[enclosureName]);
  55.  
  56.                 int animalsCount = UserUtils.GenerateRandomNumber(MinimumAnimalsCount, MaximumAnimalsCount);
  57.  
  58.                 for (int i = 0; i < animalsCount; i++)
  59.                 {
  60.                     string randomAnimalName = animals.Keys.ElementAt(UserUtils.GenerateRandomNumber(0, animals.Count));
  61.  
  62.                     enclosure.AddAnimal(randomAnimalName, animals[randomAnimalName]);
  63.                 }
  64.  
  65.                 _enclosures.Add(enclosure);
  66.             }
  67.         }
  68.  
  69.         public void Work()
  70.         {
  71.             const char CommandExit = 'q';
  72.  
  73.             bool isWorking = true;
  74.  
  75.             while (isWorking)
  76.             {
  77.                 ShowInfo();
  78.                 Console.Write("\nВведите номер вольера, к которому хотите подойти: ");
  79.  
  80.                 int enclosureIndex = ReadEnclosureIndex();
  81.  
  82.                 Console.Clear();
  83.                 _enclosures[enclosureIndex].ShowInfo();
  84.                 Console.WriteLine($"\nДля продолжения прогулки по зооппарку нажмите любую клавишу или {CommandExit} для выхода...");
  85.                
  86.                 if(Console.ReadKey().KeyChar == CommandExit)
  87.                     isWorking = false;
  88.  
  89.                 Console.Clear();
  90.             }
  91.  
  92.             Console.WriteLine("\nДо свидания!");
  93.         }
  94.  
  95.         private void ShowInfo()
  96.         {
  97.             int enclosureNumber = 1;
  98.  
  99.             Console.WriteLine($"В зоопарке {_enclosures.Count} вольеров\n");
  100.  
  101.             foreach (Enclosure enclosure in _enclosures)
  102.             {
  103.                 Console.Write($"{enclosureNumber++} - ");
  104.                 enclosure.ShowShortInfo();
  105.             }
  106.         }
  107.  
  108.         private int ReadEnclosureIndex()
  109.         {
  110.             bool isCorrectIndex = false;
  111.             int enclosureIndex = 0;
  112.  
  113.             while (isCorrectIndex == false)
  114.             {
  115.                 enclosureIndex = ReadInt() - 1;
  116.  
  117.                 if (enclosureIndex >= 0 && enclosureIndex < _enclosures.Count)
  118.                 {
  119.                     isCorrectIndex = true;
  120.                 }
  121.                 else
  122.                 {
  123.                     Console.Write("Такого номера вольера не существует, попробуйте еще раз: ");
  124.                 }
  125.             }
  126.  
  127.             return enclosureIndex;
  128.         }
  129.  
  130.         private int ReadInt()
  131.         {
  132.             int number;
  133.  
  134.             while (int.TryParse(Console.ReadLine(), out number) == false)
  135.             {
  136.                 Console.Write("это не число, попробуйте еще раз: ");
  137.             }
  138.  
  139.             return number;
  140.         }
  141.     }
  142.  
  143.     public class Enclosure
  144.     {
  145.         private string _name;
  146.         private string _description;
  147.         private List<Animal> _animals = new List<Animal>();
  148.  
  149.         public Enclosure(string name, string description)
  150.         {
  151.             _name = name;
  152.             _description = description;
  153.         }
  154.  
  155.         public void ShowShortInfo()
  156.         {
  157.             Console.WriteLine($"Вольер \"{_name}\" - {_description}, содержит {_animals.Count} животных");
  158.         }
  159.  
  160.         public void ShowInfo()
  161.         {
  162.             ShowShortInfo();
  163.             Console.WriteLine();
  164.  
  165.             foreach (Animal animal in _animals)
  166.             {
  167.                 animal.ShowInfo();
  168.             }
  169.         }
  170.  
  171.         public void AddAnimal(string name, string sound)
  172.         {
  173.             _animals.Add(new Animal(name, sound));
  174.         }
  175.     }
  176.  
  177.     enum Gender
  178.     {
  179.         male,
  180.         female
  181.     }
  182.  
  183.     public class Animal
  184.     {
  185.         private string _name;
  186.         private string _sound;
  187.         private Gender _gender;
  188.  
  189.         public Animal(string name, string sound)
  190.         {
  191.             _name = name;
  192.             _sound = sound;
  193.  
  194.             if (UserUtils.GenerateHalfProbability())
  195.                 _gender = Gender.male;
  196.             else
  197.                 _gender = Gender.female;
  198.         }
  199.  
  200.         public void ShowInfo()
  201.         {
  202.             Console.Write($"{_name}, ");
  203.  
  204.             if (_gender == Gender.male)
  205.             {
  206.                 Console.Write("мальчик");
  207.             }
  208.             else
  209.             {
  210.                 Console.Write("девочка");
  211.             }
  212.  
  213.             Console.WriteLine($", {_sound}");
  214.         }
  215.     }
  216.  
  217.     public class UserUtils
  218.     {
  219.         private const int MinimumPercent = 0;
  220.         private const int MaximumPercent = 100;
  221.         private const int HalfPercent = 50;
  222.  
  223.         private static Random s_random = new Random();
  224.  
  225.         public static int GenerateRandomNumber(int minimumNumber, int maximumNumber)
  226.         {
  227.             return s_random.Next(minimumNumber, maximumNumber);
  228.         }
  229.  
  230.         public static bool GenerateHalfProbability()
  231.         {
  232.             return s_random.Next(MinimumPercent, MaximumPercent) < HalfPercent;
  233.         }
  234.     }
  235. }
  236.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement