SaNik74

Zoo

Sep 8th, 2024 (edited)
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.80 KB | None | 0 0
  1. using System.Diagnostics;
  2. using System.Reflection.Metadata.Ecma335;
  3. using System.Threading.Channels;
  4.  
  5. namespace Zoo
  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. class Zoo
  18. {
  19. private List<Animal> _typeAnimal = new List<Animal>();
  20. private List<Aviary> _aviaries = new List<Aviary>();
  21.  
  22. public Zoo()
  23. {
  24. _typeAnimal.Add(new Fox());
  25. _typeAnimal.Add(new Bear());
  26. _typeAnimal.Add(new Wolf());
  27. _typeAnimal.Add(new Gorilla());
  28.  
  29. CreateAllAviary();
  30. }
  31.  
  32. public void Work()
  33. {
  34. const int CommandChooseAviary = 1;
  35. const int CommandLeave = 2;
  36.  
  37. bool isWorking = true;
  38.  
  39. while (isWorking)
  40. {
  41. Console.WriteLine("Стенд с информацией о вальерах.\n\n");
  42.  
  43. ShowAviariesName();
  44.  
  45. Console.WriteLine($"\n\nВыберете команду.\n" +
  46. $"Чтобы выбрать вальер нажмите - {CommandChooseAviary}\n" +
  47. $"Чтобы уйти из зоопарка нажмите - {CommandLeave}\n");
  48.  
  49. switch (UserUnits.ReadNumber())
  50. {
  51. case CommandChooseAviary:
  52. ChooseAviary().ShowInfo();
  53. break;
  54.  
  55. case CommandLeave:
  56. isWorking = false;
  57. break;
  58.  
  59. default:
  60. Console.WriteLine("Неизвестная команда.");
  61. break;
  62. }
  63.  
  64. Console.ReadKey();
  65. Console.Clear();
  66. }
  67. }
  68.  
  69. private void CreateAllAviary()
  70. {
  71. for (int i = 0; _typeAnimal.Count > i; i++)
  72. {
  73. Aviary aviary = new Aviary(_typeAnimal[i]);
  74.  
  75. _aviaries.Add(aviary);
  76. }
  77. }
  78.  
  79. private Aviary ChooseAviary()
  80. {
  81. Console.WriteLine("Введите номер вальера к которому хотите подойти:");
  82.  
  83. int userInput = UserUnits.ReadNumber();
  84.  
  85. return _aviaries[userInput - 1];
  86. }
  87.  
  88. private void ShowAviariesName()
  89. {
  90. for (int i = 0; _aviaries.Count > i; i++)
  91. {
  92. Console.WriteLine(i + 1 + " " + _aviaries[i].GetName());
  93. }
  94. }
  95. }
  96.  
  97. class Aviary
  98. {
  99. private List<Animal> _animals = new List<Animal>();
  100. private int _maxCountAnimals = 15;
  101. private int _minCountAnimals = 1;
  102.  
  103. public Aviary(Animal animal)
  104. {
  105. Create(animal);
  106. }
  107.  
  108. public void Create(Animal animal)
  109. {
  110. int countOfAnimals = UserUnits.GetRandomNumber(_minCountAnimals, _maxCountAnimals);
  111.  
  112. for (int i = 0; i < countOfAnimals; i++)
  113. {
  114. _animals.Add(animal.Clone());
  115. }
  116. }
  117.  
  118. public string GetName()
  119. {
  120. return _animals[0].Name;
  121. }
  122.  
  123. public void ShowInfo()
  124. {
  125. Console.WriteLine($"В этом вальере обитает {_animals[0].Name}.\n" +
  126. $"{_animals[0].Name} издает {_animals[0].VoiceSound}.\n" +
  127. $"Количество животных в вальере {_animals.Count}.\n\n");
  128.  
  129. Console.WriteLine("Список всех животных их возраст и пол:");
  130.  
  131. foreach (Animal animal in _animals)
  132. {
  133. Console.WriteLine($"{animal.Name} - возраст {animal.Age} - пол {animal.Gender}");
  134. }
  135. }
  136. }
  137.  
  138. abstract class Animal
  139. {
  140. private int _age;
  141. private string _gender;
  142.  
  143. public Animal(string name, string voiceSound)
  144. {
  145. Name = name;
  146. VoiceSound = voiceSound;
  147.  
  148. SetRandomAge();
  149. SetRandomGender();
  150. }
  151.  
  152. public string Name { get; private set; }
  153. public string VoiceSound { get; private set; }
  154. public int Age { get; private set; }
  155. public string Gender { get; private set; }
  156.  
  157. public void SetRandomGender()
  158. {
  159. string genderMale = "самец";
  160. string genderFemale = "самка";
  161.  
  162. if (UserUnits.GetRandomNumber() % 2 == 0)
  163. {
  164. Gender = genderFemale;
  165. }
  166. else
  167. {
  168. Gender = genderMale;
  169. }
  170. }
  171.  
  172. virtual public void SetRandomAge(int maxAge = 50, int minAge = 1)
  173. {
  174. Age = UserUnits.GetRandomNumber(minAge, maxAge);
  175. }
  176.  
  177. abstract public Animal Clone();
  178. }
  179.  
  180. class Fox : Animal
  181. {
  182. public Fox() : base("Лиса", "Лай")
  183. {
  184. SetRandomAge();
  185. SetRandomGender();
  186. }
  187.  
  188. public override void SetRandomAge(int maxAge = 25, int minAge = 1)
  189. {
  190. base.SetRandomAge(maxAge, minAge);
  191. }
  192.  
  193. public override Animal Clone()
  194. {
  195. return new Fox();
  196. }
  197. }
  198. class Bear : Animal
  199. {
  200. public Bear() : base("Медведь", "Рык")
  201. {
  202.  
  203. }
  204.  
  205. public override Animal Clone()
  206. {
  207. return new Bear();
  208. }
  209. }
  210.  
  211. class Gorilla : Animal
  212. {
  213. public Gorilla() : base("Горилла", "Рык и звук похожий на \"хм\"")
  214. {
  215.  
  216. }
  217.  
  218. public override Animal Clone()
  219. {
  220. return new Gorilla();
  221. }
  222. }
  223.  
  224. class Wolf : Animal
  225. {
  226. public Wolf() : base("Волк", "Вой")
  227. {
  228. SetRandomAge();
  229. SetRandomGender();
  230. }
  231.  
  232. public override void SetRandomAge(int maxAge = 17, int minAge = 1)
  233. {
  234. base.SetRandomAge(maxAge, minAge);
  235. }
  236.  
  237. public override Animal Clone()
  238. {
  239. return new Wolf();
  240. }
  241. }
  242.  
  243. class UserUnits
  244. {
  245. private static Random s_random = new Random();
  246.  
  247. public static int GetRandomNumber(int min = int.MinValue, int max = int.MaxValue)
  248. {
  249. return s_random.Next(min, max);
  250. }
  251. public static int ReadNumber()
  252. {
  253. bool isNumber = false;
  254. int result = 0;
  255.  
  256. while (isNumber == false)
  257. {
  258. isNumber = int.TryParse(Console.ReadLine(), out result);
  259. }
  260.  
  261. return result;
  262. }
  263. }
  264. }
Advertisement
Add Comment
Please, Sign In to add comment