Advertisement
OldBeliver

Aquarium_ver02

Jun 15th, 2021
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.21 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Aquarium_02
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             int fishLimit = 15;
  14.             Aquarium aquarium = new Aquarium(fishLimit);
  15.             aquarium.KeepWatch();
  16.         }
  17.     }
  18.  
  19.     class Aquarium
  20.     {
  21.         private int _size;
  22.         private List<Fish> _fishes;
  23.  
  24.         public Aquarium(int size)
  25.         {
  26.             _size = size;
  27.             _fishes = new List<Fish>();
  28.         }
  29.  
  30.         public void KeepWatch()
  31.         {
  32.             bool isKeep = true;
  33.  
  34.             while (isKeep)
  35.             {
  36.                 ShowFishes();
  37.                 ShowMenu();
  38.  
  39.                 string userInput = Console.ReadLine();
  40.  
  41.                 switch (userInput)
  42.                 {
  43.                     case "0":
  44.                         SkipWeek();
  45.                         MeetDeath();
  46.                         break;
  47.                     case "1":
  48.                         AddFish();
  49.                         break;
  50.                     case "2":
  51.                         RemoveFish();
  52.                         break;
  53.                     case "9":
  54.                         isKeep = false;
  55.                         break;
  56.                     default:
  57.                         Console.WriteLine($"Ошибка ввода команды.");
  58.                         break;
  59.                 }
  60.  
  61.                 Console.Write($"нажмите любую для продолжения ...");
  62.                 Console.ReadKey();
  63.                 Console.Clear();
  64.             }
  65.         }
  66.  
  67.         private void ShowFishes()
  68.         {
  69.             string title = " рыбки в аквариуме ";
  70.  
  71.             if(_fishes.Count == 0)
  72.             {
  73.                 title = " аквариум пустой ";
  74.             }
  75.  
  76.             Console.WriteLine($"{title} {_fishes.Count}/{_size}");
  77.  
  78.             for (int i = 0; i < _fishes.Count; i++)
  79.             {
  80.                 Console.Write($"{i + 1:d2}. ");
  81.                 _fishes[i].ViewFish();
  82.             }
  83.         }
  84.  
  85.         private void ShowMenu()
  86.         {
  87.             Console.WriteLine($"-------------------");
  88.             Console.WriteLine($"1. Добавить рыбку\n2. Отсадить рыбку\n0. Завершить ход\n9. Выйти");
  89.             Console.Write($"\nВведите команду: ");
  90.         }
  91.  
  92.         private void AddFish()
  93.         {
  94.             if (_fishes.Count >= _size)
  95.             {
  96.                 Console.WriteLine($"Нельзя добавить рыбку. Это будет банка со шпротами, а не аквариум");
  97.             }
  98.             else
  99.             {
  100.                 Console.WriteLine($"-------------------");
  101.                 Console.WriteLine($"Добавить в аквариум рыбку под номером:");
  102.                 Console.Write($"1. Склярия 2.Барбус 3.Гуппи : ");
  103.  
  104.                 string userInput = Console.ReadLine();
  105.  
  106.                 switch (userInput)
  107.                 {
  108.                     case "1":
  109.                         _fishes.Add(new AngelFish());
  110.                         Console.WriteLine($"в аквариум запустили рыбку склярия");
  111.                         break;
  112.                     case "2":
  113.                         _fishes.Add(new Barbus());
  114.                         Console.WriteLine($"в аквариум запустили рыбку барбус");
  115.                         break;
  116.                     case "3":
  117.                         _fishes.Add(new Guppy());
  118.                         Console.WriteLine($"в аквариум запустили рыбку гуппи");
  119.                         break;
  120.                 }
  121.             }
  122.         }
  123.  
  124.         private void RemoveFish()
  125.         {  
  126.             Console.Write($"Введите номер рыбки, которую нужно отсадить: ");
  127.  
  128.             if(int.TryParse(Console.ReadLine(), out int number))
  129.             {
  130.                 if (number >= 1 && number <= _fishes.Count)
  131.                 {
  132.                     Console.WriteLine($"рыбку {_fishes[number-1].Name} отсадили");
  133.                     _fishes.RemoveAt(number - 1);
  134.                 }
  135.             }
  136.             else
  137.             {
  138.                 Console.WriteLine($"ошибка выбора номера рыбки");
  139.             }
  140.         }
  141.  
  142.         private void SkipWeek()
  143.         {
  144.             for (int i = 0; i < _fishes.Count; i++)
  145.             {
  146.                 _fishes[i].SkipWeek();
  147.             }
  148.         }
  149.  
  150.         private void MeetDeath()
  151.         {
  152.             for (int i = _fishes.Count; i > 0; i--)
  153.             {
  154.                 if (_fishes[i - 1].IsDead())
  155.                 {
  156.                     Console.WriteLine($"{_fishes[i - 1].Name} не будет больше радовать Вас");
  157.                     _fishes.RemoveAt(i - 1);
  158.                 }
  159.             }
  160.         }
  161.     }
  162.  
  163.     abstract class Fish
  164.     {
  165.         protected string Sort;
  166.         protected string[] AllSorts;
  167.         protected int LifeTime;
  168.         protected int minLifeSpan;
  169.         protected int maxLifeSpan;
  170.         protected int Age;
  171.  
  172.         private static Random _rand = new Random();
  173.  
  174.         public string Name { get; protected set; }
  175.  
  176.  
  177.         public Fish(string name)
  178.         {
  179.             Name = name;
  180.             Age = 0;
  181.         }
  182.  
  183.         public void ViewFish()
  184.         {
  185.             Console.WriteLine($"{Name} {Sort} возраст {Age}/{LifeTime} недель");
  186.         }
  187.  
  188.         public void SkipWeek()
  189.         {
  190.             Age++;
  191.         }
  192.  
  193.         public bool IsDead()
  194.         {
  195.             return Age > LifeTime;
  196.         }
  197.  
  198.  
  199.         protected int GetRandomIndex(int maxIndex)
  200.         {
  201.             return _rand.Next(maxIndex);
  202.         }
  203.  
  204.         protected int GetRandomLifeTime(int minLifeSpan, int maxLifeSpan)
  205.         {
  206.             return _rand.Next(minLifeSpan, maxLifeSpan + 1);
  207.         }
  208.     }
  209.  
  210.     class AngelFish : Fish
  211.     {
  212.         public AngelFish() : base("скалярия")
  213.         {
  214.             minLifeSpan = 5;
  215.             maxLifeSpan = 10;
  216.  
  217.             LoadFishSorts();
  218.             int index = GetRandomIndex(AllSorts.Length);
  219.             Sort = AllSorts[index];
  220.  
  221.             LifeTime = GetRandomLifeTime(minLifeSpan, maxLifeSpan);
  222.         }
  223.  
  224.         private void LoadFishSorts()
  225.         {
  226.             AllSorts = new string[]
  227.             {
  228.                 "дымчато-вуалевая",
  229.                 "золотисто-перламутровая",
  230.                 "золотая",
  231.                 "мраморная",
  232.                 "шлейфовая",
  233.                 "черная",
  234.                 "Кои"
  235.             };
  236.         }
  237.     }
  238.  
  239.     class Barbus : Fish
  240.     {
  241.         public Barbus() : base("барбус")
  242.         {
  243.             minLifeSpan = 6;
  244.             maxLifeSpan = 12;
  245.  
  246.             LoadFishSorts();
  247.             int index = GetRandomIndex(AllSorts.Length);
  248.             Sort = AllSorts[index];
  249.  
  250.             LifeTime = GetRandomLifeTime(minLifeSpan, maxLifeSpan);
  251.         }
  252.  
  253.         private void LoadFishSorts()
  254.         {
  255.             AllSorts = new string[]
  256.             {
  257.                 "суматранский",
  258.                 "мшистый",
  259.                 "огненный",
  260.                 "вишневый",
  261.                 "флуоресцентный"
  262.             };
  263.         }
  264.     }
  265.  
  266.     class Guppy : Fish
  267.     {
  268.         public Guppy():base("гуппи")
  269.         {
  270.             minLifeSpan = 8;
  271.             maxLifeSpan = 16;
  272.  
  273.             LoadFishSorts();
  274.             int index = GetRandomIndex(AllSorts.Length);
  275.             Sort = AllSorts[index];
  276.  
  277.             LifeTime = GetRandomLifeTime(minLifeSpan, maxLifeSpan);
  278.         }
  279.  
  280.         private void LoadFishSorts()
  281.         {
  282.             AllSorts = new string[]
  283.             {
  284.                 "вуалевая",
  285.                 "ковровая",
  286.                 "ленточная",
  287.                 "сетчатая",
  288.                 "смарагдовая"
  289.             };  
  290.         }
  291.     }
  292. }
  293.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement