Advertisement
Vlad_Savitskiy

Aquarium

Jun 28th, 2020
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.43 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4.  
  5. namespace CSLight
  6. {
  7.     class Program
  8.     {
  9.         private static void Main()
  10.         {
  11.             List<Fish> allFish = new List<Fish>
  12.             {
  13.                 new СockerelFish(0),
  14.                 new CatFish(0),
  15.                 new GoldFish(0),
  16.                 new Molliesia(0),
  17.                 new ZebraFish(0)
  18.             };
  19.  
  20.             Aquarium aquarium = new Aquarium(new List<Fish>
  21.             {
  22.                 new CatFish(1),
  23.                 new СockerelFish(0),
  24.                 new GoldFish(4),
  25.                 new ZebraFish(2),
  26.                 new Molliesia(0)
  27.             });
  28.  
  29.             while (true)
  30.             {
  31.                 Console.Clear();
  32.                 aquarium.ShowAquarium();
  33.  
  34.                 Console.WriteLine("Что Вы хотите сделать?\n  1 - Добавить рыбку\n  2 - Удалить рыбку\n" +
  35.                                   "  3 - Перейти к следующему году проживания аквариума\n");
  36.                 switch (Console.ReadLine())
  37.                 {
  38.                     case "1":
  39.                         AddFish(aquarium, allFish);
  40.                         break;
  41.                     case "2":
  42.                         RemoveFish(aquarium);
  43.                         break;
  44.                     case "3":
  45.                         MakeIteration(aquarium);
  46.                         break;
  47.                     default:
  48.                         continue;
  49.                 }
  50.             }
  51.         }
  52.  
  53.         private static void AddFish(Aquarium aquarium, List<Fish> allFish)
  54.         {
  55.             Console.Clear();
  56.  
  57.             if (aquarium.FishCount >= aquarium.MaxFishCount)
  58.             {
  59.                 Printer.Print("Достигнуто максимальное количество рыбок в аквариуме...\n\n", ConsoleColor.DarkRed);
  60.                 Printer.Print("Нажмите любую клавишу, чтобы продолжить...");
  61.                 Console.ReadKey();
  62.                 return;
  63.             }
  64.  
  65.             Console.WriteLine("Какую бы рыбку Вы хотели добавить? (укажите номер рыбки)\n");
  66.  
  67.             for (int i = 0; i < allFish.Count; i++)
  68.                 Printer.Print($"  {i + 1} - {allFish[i].Name}\n", allFish[i].Color);
  69.  
  70.             Console.Write("\nВаш ответ: ");
  71.             if (int.TryParse(Console.ReadLine(), out int indexFish) && indexFish > 0 && indexFish < allFish.Count + 1)
  72.             {
  73.                 Fish fish = (Fish)allFish[indexFish - 1].Clone();
  74.                 aquarium.AddFish(fish);
  75.             }
  76.         }
  77.  
  78.         private static void RemoveFish(Aquarium aquarium)
  79.         {
  80.             Console.Clear();
  81.             aquarium.ShowAquarium();
  82.             Console.WriteLine("Какую бы рыбку Вы хотели удалить? (укажите номер рыбки)");
  83.  
  84.             Console.Write("\nВаш ответ: ");
  85.             if (int.TryParse(Console.ReadLine(), out int indexFish) && indexFish > 0 && indexFish < aquarium.FishCount + 1)
  86.                 aquarium.RemoveFishAt(indexFish - 1);
  87.         }
  88.  
  89.         private static void MakeIteration(Aquarium aquarium)
  90.         {
  91.             for (int i = 0; i < aquarium.FishCount; i++)
  92.             {
  93.                 Fish fish = aquarium[i];
  94.                 fish.IncrementAge();
  95.                 if (fish.Age > fish.DeathAge)
  96.                     aquarium.RemoveFishAt(i);
  97.             }
  98.         }
  99.     }
  100.  
  101.     class Aquarium : IEnumerable
  102.     {
  103.         public int FishCount => _fishInAquarium.Count;
  104.         public int MaxFishCount { get; }
  105.         private List<Fish> _fishInAquarium;
  106.         private static readonly Random Rand = new Random();
  107.  
  108.         public Aquarium(List<Fish> fishInAquarium)
  109.         {
  110.             _fishInAquarium = fishInAquarium;
  111.             MaxFishCount = Rand.Next(10, 20);
  112.         }
  113.  
  114.         public void AddFish(Fish fish)
  115.         {
  116.             _fishInAquarium.Add(fish);
  117.         }
  118.  
  119.         public void RemoveFish(Fish fish)
  120.         {
  121.             int index = _fishInAquarium.FindIndex(item => item == fish);
  122.             if (index < 0)
  123.                 return;
  124.             _fishInAquarium.RemoveAt(index);
  125.         }
  126.  
  127.         public void RemoveFishAt(int index)
  128.         {
  129.             if (index < 0 || index >= _fishInAquarium.Count)
  130.                 return;
  131.             _fishInAquarium.RemoveAt(index);
  132.         }
  133.  
  134.         public void ShowAquarium()
  135.         {
  136.             if (_fishInAquarium.Count == 0)
  137.             {
  138.                 Printer.Print("В аквариуме нет ни одной рыбки...\n\n", ConsoleColor.DarkRed);
  139.                 return;
  140.             }
  141.  
  142.             Printer.Print("Население аквариума в данный момент:\n\n", ConsoleColor.Green);
  143.  
  144.             for (int i = 0; i < _fishInAquarium.Count; i++)
  145.             {
  146.                 Printer.Print($"{i + 1}. {_fishInAquarium[i].Name}\n" +
  147.                       $"    Возраст рыбы: {_fishInAquarium[i].Age} лет\n" +
  148.                       $"    Возраст смерти: {_fishInAquarium[i].DeathAge} лет\n\n", _fishInAquarium[i].Color);
  149.             }
  150.         }
  151.  
  152.         public Fish this[int index]
  153.         {
  154.             get
  155.             {
  156.                 if (index < 0 || index >= _fishInAquarium.Count)
  157.                     throw new ArgumentException("Некорректный номер рыбы.");
  158.  
  159.                 return _fishInAquarium[index];
  160.             }
  161.         }
  162.  
  163.         public IEnumerator GetEnumerator()
  164.         {
  165.             return new AquariumEnumerator(_fishInAquarium);
  166.         }
  167.  
  168.         class AquariumEnumerator : IEnumerator
  169.         {
  170.             private List<Fish> _fishInAquarium;
  171.             private int indexPosition = -1;
  172.  
  173.             public AquariumEnumerator(List<Fish> fishInAquarium)
  174.             {
  175.                 _fishInAquarium = fishInAquarium;
  176.             }
  177.  
  178.             public bool MoveNext()
  179.             {
  180.                 indexPosition++;
  181.                 return indexPosition < _fishInAquarium.Count;
  182.             }
  183.  
  184.             public void Reset()
  185.             {
  186.                 indexPosition = -1;
  187.             }
  188.  
  189.             public object Current => _fishInAquarium[indexPosition];
  190.         }
  191.     }
  192.  
  193.     abstract class Fish : ICloneable
  194.     {
  195.         public string Name { get; protected set; }
  196.         public int Age { get; protected set; }
  197.         public int DeathAge { get; protected set; }
  198.         public ConsoleColor Color { get; protected set; }
  199.         protected static readonly Random Rand = new Random();
  200.  
  201.         public void IncrementAge()
  202.         {
  203.             Age++;
  204.         }
  205.  
  206.         public object Clone()
  207.         {
  208.             return MemberwiseClone();
  209.         }
  210.     }
  211.  
  212.     class GoldFish : Fish
  213.     {
  214.         public GoldFish(int age)
  215.         {
  216.             Age = age;
  217.             Name = "Золотая рыбка";
  218.             DeathAge = Rand.Next(10, 16);
  219.             Color = ConsoleColor.DarkYellow;
  220.         }
  221.     }
  222.  
  223.     class CatFish : Fish
  224.     {
  225.         public CatFish(int age)
  226.         {
  227.             Age = age;
  228.             Name = "Панцирный сом";
  229.             DeathAge = Rand.Next(7, 16);
  230.             Color = ConsoleColor.DarkRed;
  231.         }
  232.     }
  233.  
  234.     class ZebraFish : Fish
  235.     {
  236.         public ZebraFish(int age)
  237.         {
  238.             Age = age;
  239.             Name = "Данио";
  240.             DeathAge = Rand.Next(5, 8);
  241.             Color = ConsoleColor.Cyan;
  242.         }
  243.     }
  244.  
  245.     class Molliesia : Fish
  246.     {
  247.         public Molliesia(int age)
  248.         {
  249.             Age = age;
  250.             Name = "Моллинезия";
  251.             DeathAge = Rand.Next(4, 6);
  252.             Color = ConsoleColor.DarkGray;
  253.         }
  254.     }
  255.  
  256.     class СockerelFish : Fish
  257.     {
  258.         public СockerelFish(int age)
  259.         {
  260.             Age = age;
  261.             Name = "Петушок";
  262.             DeathAge = Rand.Next(2, 4);
  263.             Color = ConsoleColor.DarkCyan;
  264.         }
  265.     }
  266.  
  267.     class Printer
  268.     {
  269.         public static void Print(string text, ConsoleColor color = ConsoleColor.White)
  270.         {
  271.             ConsoleColor defaultColor = Console.ForegroundColor;
  272.  
  273.             Console.ForegroundColor = color;
  274.             Console.Write(text);
  275.             Console.ForegroundColor = defaultColor;
  276.         }
  277.     }
  278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement