Advertisement
ZhongNi

zoo (2)

Nov 11th, 2024
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.63 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace Classes
  6. {
  7.     internal class Program
  8.     {
  9.         static void Main()
  10.         {
  11.             Zoo zoo = new Zoo();
  12.             zoo.Work();
  13.         }
  14.     }
  15.  
  16.     public class Zoo
  17.     {
  18.         private List<Animals> _animals;
  19.         private List<Animals>[] _cages;
  20.         private string[] _cagesName;
  21.  
  22.         public Zoo()
  23.         {
  24.             _animals = new List<Animals>
  25.             {
  26.                 new Animal1() ,
  27.                 new Animal2() ,
  28.                 new Animal3() ,
  29.                 new Animal4()
  30.             };
  31.  
  32.             _cages = new List<Animals>[_animals.Count];
  33.             _cagesName = new string[_cages.Length];
  34.  
  35.             foreach (var animal in _animals.OfType<IIncreaseable>())
  36.             {
  37.                 animal.IncreaseRequested += Increase;
  38.             }
  39.  
  40.             foreach (var animal in _animals.OfType<IRenovateable>())
  41.             {
  42.                 animal.RenovateRequested += Renovate;
  43.             }
  44.  
  45.             FillCages();
  46.         }
  47.  
  48.         public void Work()
  49.         {
  50.             bool isWorking = true;
  51.  
  52.             Console.WriteLine("Welcome in Zoo");
  53.  
  54.             while (isWorking)
  55.             {
  56.                 DisplayCages();
  57.                 isWorking = ProcessUserInput();
  58.             }
  59.         }
  60.  
  61.         private void DisplayCages()
  62.         {
  63.             Console.WriteLine($"There are {_cages.Length} cages");
  64.  
  65.             for (int i = 0; i < _cagesName.Length; i++)
  66.             {
  67.                 Console.WriteLine($"Cage {i + 1} {_cagesName[i]}");
  68.             }
  69.         }
  70.  
  71.         private bool ProcessUserInput()
  72.         {
  73.             const int CommandExit = 5;
  74.  
  75.             Console.WriteLine($"\nWhich cage do you want to visit? or {CommandExit} for exit..");
  76.  
  77.             int.TryParse(Console.ReadLine(), out int userInput);
  78.  
  79.             if (userInput == CommandExit)
  80.             {
  81.                 return false;
  82.             }
  83.  
  84.             if (TrySelectCage(userInput - 1))
  85.             {
  86.                 _cagesName[userInput - 1] = "contains " + _animals[userInput - 1].Name;
  87.  
  88.                 return true;
  89.             }
  90.  
  91.             return true;
  92.         }
  93.  
  94.         private bool TrySelectCage(int index)
  95.         {
  96.             if (index >= 0 && index < _cages.Length)
  97.             {
  98.                 ShowCage(index);
  99.                 Interact(index);
  100.  
  101.                 return true;
  102.             }
  103.             else
  104.             {
  105.                 Console.WriteLine("No such cage");
  106.  
  107.                 return false;
  108.             }
  109.         }
  110.  
  111.         private void ShowCage(int index)
  112.         {
  113.             Console.WriteLine($"There are {_cages[index].Count} {_animals[index].Name} contains in the cage, " +
  114.                 $"their gender is:\n{GetAnimalsGender(_cages[index])}");
  115.             _animals[index].Speaks();
  116.         }
  117.  
  118.         private string GetAnimalsGender(List<Animals> animals)
  119.         {
  120.             var genders = animals.Select(animal => animal.Gender).Distinct().OrderBy(gender => gender);
  121.  
  122.             string animalsGender = string.Join(", ", genders);
  123.  
  124.             return animalsGender;
  125.         }
  126.  
  127.         private void Interact(int index)
  128.         {
  129.             _animals[index].InteractWithVisitor(index);
  130.         }
  131.  
  132.         private void FillCages()
  133.         {
  134.             for (int i = 0; i < _cages.Length; i++)
  135.             {
  136.                 _cages[i] = new List<Animals>();
  137.  
  138.                 for (int j = 0; j < UserUtil.GetRandomNumber(_animals[i].MinCountCage, _animals[i].MaxCountCage + 1); j++)
  139.                 {
  140.                     _cages[i].Add(_animals[i].Clone());
  141.                 }
  142.             }
  143.         }
  144.  
  145.         private void Increase(int index)
  146.         {
  147.             _cages[index].Add(_animals[index].Clone());
  148.         }
  149.  
  150.         private void Renovate(int index)
  151.         {
  152.             int numberRemoved = 3;
  153.             int numberAdded = 3;
  154.  
  155.             for (int i = 0; i < UserUtil.GetRandomNumber(numberAdded + 1); i++)
  156.             {
  157.                 if (_cages[index].Count == _animals[index].MaxCountCage)
  158.                 {
  159.                     continue;
  160.                 }
  161.  
  162.                 _cages[index].Add(_animals[index].Clone());
  163.             }
  164.  
  165.             for (int i = 0; i < UserUtil.GetRandomNumber(numberRemoved + 1); i++)
  166.             {
  167.                 if (_cages[index].Count == _animals[index].MinCountCage)
  168.                 {
  169.                     continue;
  170.                 }
  171.  
  172.                 _cages[index].RemoveAt(UserUtil.GetRandomNumber(_cages[index].Count));
  173.             }
  174.         }
  175.     }
  176.  
  177.     public abstract class Animals
  178.     {
  179.         public string Name { get; protected set; }
  180.         public string Gender { get; protected set; }
  181.         public int MaxCountCage { get; protected set; }
  182.         public int MinCountCage { get; protected set; }
  183.  
  184.         public abstract void Speaks();
  185.  
  186.         public abstract string InitiateGender();
  187.  
  188.         public abstract Animals Clone();
  189.  
  190.         public virtual void InteractWithVisitor(int index)
  191.         {
  192.             Console.WriteLine("You return to the cage selection. Press something..\n");
  193.             Console.ReadKey(true);
  194.         }
  195.     }
  196.  
  197.     public interface IIncreaseable
  198.     {
  199.         event Action<int> IncreaseRequested;
  200.     }
  201.  
  202.     public class Animal1 : Animals, IIncreaseable
  203.     {
  204.         public event Action<int> IncreaseRequested;
  205.  
  206.         public Animal1()
  207.         {
  208.             Name = "Flamibia";
  209.             Gender = InitiateGender();
  210.             MaxCountCage = 100;
  211.             MinCountCage = 70;
  212.         }
  213.  
  214.         public override void Speaks()
  215.         {
  216.             Console.WriteLine($"You can't hear anything from the {Name} cage");
  217.         }
  218.  
  219.         public override string InitiateGender()
  220.         {
  221.             int genderCount = 784;
  222.             Gender = "Gender " + (UserUtil.GetRandomNumber(genderCount) + 1);
  223.  
  224.             return Gender;
  225.         }
  226.  
  227.         public override Animals Clone()
  228.         {
  229.             return new Animal1();
  230.         }
  231.  
  232.         public override void InteractWithVisitor(int index)
  233.         {
  234.             int maxStep = 3;
  235.  
  236.             for (int i = 0; i < maxStep; i++)
  237.             {
  238.                 Console.WriteLine($"You are coming back. You hear a voice of {Name}. Press something..");
  239.                 Console.ReadKey(true);
  240.             }
  241.  
  242.             Console.WriteLine($"You became {Name}. You understand what {Name} say. Press something..");
  243.             IncreaseRequested?.Invoke(index);
  244.             Console.ReadKey(true);
  245.  
  246.             Console.WriteLine("You were reborn.. Press something..\n");
  247.             Console.ReadKey(true);
  248.         }
  249.     }
  250.  
  251.     public class Animal2 : Animals
  252.     {
  253.         public Animal2()
  254.         {
  255.             Name = "Qoster";
  256.             Gender = InitiateGender();
  257.             MaxCountCage = 12;
  258.             MinCountCage = 8;
  259.         }
  260.  
  261.         public override void Speaks()
  262.         {
  263.             Console.WriteLine($"You can hear: cheepcheepcheepcheepcheepcheep");
  264.         }
  265.  
  266.         public override string InitiateGender()
  267.         {
  268.             string[] genders = { "XX", "XT", "TT", "ZZ" };
  269.             Gender = genders[UserUtil.GetRandomNumber(genders.Length)];
  270.  
  271.             return Gender;
  272.         }
  273.  
  274.         public override Animals Clone()
  275.         {
  276.             return new Animal2();
  277.         }
  278.     }
  279.  
  280.     public interface IRenovateable
  281.     {
  282.         event Action<int> RenovateRequested;
  283.     }
  284.  
  285.     public class Animal3 : Animals, IRenovateable
  286.     {
  287.         public event Action<int> RenovateRequested;
  288.  
  289.         public Animal3()
  290.         {
  291.             Name = "Kedenee";
  292.             Gender = InitiateGender();
  293.             MaxCountCage = 7;
  294.             MinCountCage = 1;
  295.         }
  296.  
  297.         public override void Speaks()
  298.         {
  299.             Console.WriteLine("You hear just quiet music");
  300.         }
  301.  
  302.         public override string InitiateGender()
  303.         {
  304.             Gender = "Genderless";
  305.  
  306.             return Gender;
  307.         }
  308.  
  309.         public override Animals Clone()
  310.         {
  311.             return new Animal3();
  312.         }
  313.  
  314.         public override void InteractWithVisitor(int index)
  315.         {
  316.             RenovateRequested?.Invoke(index);
  317.             Console.WriteLine("You wanted to come back. But you were eaten. You were reborn.. Press something..\n");
  318.             Console.ReadKey(true);
  319.         }
  320.     }
  321.  
  322.     public class Animal4 : Animals
  323.     {
  324.         public Animal4()
  325.         {
  326.             Name = "Wooni";
  327.             Gender = InitiateGender();
  328.             MaxCountCage = 20;
  329.             MinCountCage = 10;
  330.         }
  331.  
  332.         public override void Speaks()
  333.         {
  334.             string[] sounds =
  335.             {
  336.                 "let's have a drink",
  337.                 "do you have cigarettes!",
  338.                 "have some change!"
  339.             };
  340.  
  341.             Console.WriteLine($"You can hear: {sounds[UserUtil.GetRandomNumber(sounds.Length)]}");
  342.         }
  343.  
  344.         public override string InitiateGender()
  345.         {
  346.             int genderCount = 2;
  347.             Gender = "Parent " + (UserUtil.GetRandomNumber(genderCount) + 1);
  348.  
  349.             return Gender;
  350.         }
  351.  
  352.         public override Animals Clone()
  353.         {
  354.             return new Animal4();
  355.         }
  356.     }
  357.  
  358.     public static class UserUtil
  359.     {
  360.         private static Random s_random = new Random();
  361.  
  362.         public static int GetRandomNumber(int min, int max)
  363.         {
  364.             return s_random.Next(min, max);
  365.         }
  366.  
  367.         public static int GetRandomNumber(int max)
  368.         {
  369.             return s_random.Next(max);
  370.         }
  371.     }
  372. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement