ranee

Аквариум

Mar 27th, 2023
716
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.00 KB | None | 0 0
  1. using System;
  2.  
  3. namespace Aquarium
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             const string CommandAddFish = "1";
  10.             const string CommandRemoveFish = "2";
  11.             const string CommandSkipYear = "3";
  12.             const string CommandExit = "4";
  13.  
  14.             bool isWork = true;
  15.             Aquarium aquarium = new Aquarium();
  16.             Console.CursorVisible = false;
  17.  
  18.             while (isWork)
  19.             {
  20.                 Menu menu = new Menu(aquarium.GetFishes());
  21.  
  22.                 Console.Clear();
  23.                 aquarium.ShowAllFishes();
  24.  
  25.                 Console.WriteLine($"{CommandAddFish}. Добавить рыбу." +
  26.                     $"\n{CommandRemoveFish}. Убрать рыбу." +
  27.                     $"\n{CommandSkipYear}. Пропустить год." +
  28.                     $"\n{CommandExit}. Выйти");
  29.  
  30.                 switch (Console.ReadLine())
  31.                 {
  32.                     case CommandAddFish:
  33.                         aquarium.AddFish();
  34.                         break;
  35.  
  36.                     case CommandRemoveFish:
  37.                         menu.TryRun(aquarium);
  38.                         break;
  39.  
  40.                     case CommandSkipYear:
  41.                         aquarium.SkipYear();
  42.                         break;
  43.  
  44.                     case CommandExit:
  45.                         isWork = false;
  46.                         break;
  47.  
  48.                     default:
  49.                         Console.WriteLine("Ошибка, такого пункта меню нет");
  50.                         break;
  51.                 }
  52.  
  53.                 Console.ReadKey();
  54.                 Console.Clear();
  55.             }
  56.         }
  57.     }
  58.  
  59.     class Aquarium
  60.     {
  61.         private List<Fish> _fishes = new List<Fish>();
  62.         private int _maxFishCount = 10;
  63.  
  64.         public void ShowAllFishes()
  65.         {
  66.             if (_fishes.Count == 0)
  67.             {
  68.                 Console.WriteLine($"Аквариум пустой.");
  69.             }
  70.             else
  71.             {
  72.                 foreach (Fish fish in _fishes)
  73.                 {
  74.                     fish.ShowInfo();
  75.                 }
  76.             }
  77.         }
  78.  
  79.         public void AddFish()
  80.         {
  81.             if (_fishes.Count < _maxFishCount)
  82.             {
  83.                 Console.Write("Введите название рыбы: ");
  84.                 string name = Console.ReadLine();
  85.                 _fishes.Add(new Fish(name));
  86.             }
  87.             else
  88.             {
  89.                 Console.WriteLine($"Достигнут лимит аквариума {_maxFishCount}.");
  90.             }
  91.         }
  92.  
  93.         public List<Fish> GetFishes()
  94.         {
  95.             List<Fish> fishesCopy = new List<Fish>(_fishes);
  96.             return fishesCopy;
  97.         }
  98.  
  99.         public void RemoveFish(int index)
  100.         {
  101.             Fish fish = _fishes[index];
  102.             _fishes.Remove(fish);
  103.         }
  104.  
  105.         public void SkipYear()
  106.         {
  107.             int year = 1;
  108.             Console.WriteLine("Прошел год.");
  109.  
  110.             foreach (Fish fish in _fishes)
  111.             {
  112.                 fish.Grow(year);
  113.                 fish.TryDie();
  114.             }
  115.         }
  116.     }
  117.  
  118.     class Fish
  119.     {
  120.         private bool _isAlive;
  121.         public Fish(string name, int age = 1, bool isAlive = true)
  122.         {
  123.             Name = name;
  124.             Age = age;
  125.             _isAlive = isAlive;
  126.         }
  127.  
  128.         public string Name { get; private set; }
  129.         public int Age { get; private set; }
  130.  
  131.         public void ShowInfo()
  132.         {
  133.             if (_isAlive)
  134.             {
  135.                 Console.WriteLine($"Название рыбы: {Name}, возраст: {Age}, здорова");
  136.             }
  137.             else
  138.             {
  139.                 Console.WriteLine($"Название рыбы: {Name}, возраст: {Age}, мертва");
  140.             }
  141.         }
  142.  
  143.         public void Grow(int year)
  144.         {
  145.             if (_isAlive)
  146.             {
  147.                 Age += year;
  148.             }
  149.         }
  150.  
  151.         public bool TryDie()
  152.         {
  153.             Random random = new Random();
  154.             int chance = random.Next(0, 101);
  155.             if (chance < Age)
  156.             {
  157.                 _isAlive = false;
  158.                 return true;
  159.             }
  160.             else
  161.             {
  162.                 return false;
  163.             }
  164.         }
  165.     }
  166.  
  167.     class Menu
  168.     {
  169.         private List<Fish> _items;
  170.         private int _selectedItemIndex;
  171.  
  172.         public Menu(List<Fish> items)
  173.         {
  174.             _items = items;
  175.             _selectedItemIndex = 0;
  176.         }
  177.  
  178.         private void Display()
  179.         {
  180.             Console.Clear();
  181.                
  182.             if(_items.Count > 0)
  183.                 {
  184.                 Console.WriteLine("Управление ▲, ▼, Enter, Esc.");
  185.  
  186.                 for (int i = 0; i < _items.Count; i++)
  187.                 {
  188.                     Fish currentItem = _items[i];
  189.  
  190.                     if (i == _selectedItemIndex)
  191.                     {
  192.                         Console.ForegroundColor = ConsoleColor.Black;
  193.                         Console.BackgroundColor = ConsoleColor.Gray;
  194.                         currentItem.ShowInfo();
  195.                     }
  196.                     else
  197.                     {
  198.                         currentItem.ShowInfo();
  199.                     }
  200.  
  201.                     Console.ResetColor();
  202.                 }
  203.             }
  204.             else
  205.             {
  206.                 Console.WriteLine("В аквариуме кончились рыбы.");
  207.             }
  208.         }
  209.  
  210.         private void MoveUp()
  211.         {
  212.             _selectedItemIndex--;
  213.  
  214.             if (_selectedItemIndex < 0)
  215.             {
  216.                 _selectedItemIndex = _items.Count - 1;
  217.             }
  218.         }
  219.  
  220.         private void MoveDown()
  221.         {
  222.             _selectedItemIndex++;
  223.  
  224.             if (_selectedItemIndex >= _items.Count)
  225.             {
  226.                 _selectedItemIndex = 0;
  227.             }
  228.         }
  229.  
  230.         private void СhooseFish(Aquarium aquarium, ref bool isWork)
  231.         {
  232.             aquarium.RemoveFish(_selectedItemIndex);
  233.             _items.RemoveAt(_selectedItemIndex);
  234.  
  235.             if (_selectedItemIndex == _items.Count)
  236.             {
  237.                 MoveUp();
  238.             }
  239.         }
  240.  
  241.         public void TryRun(Aquarium aquarium)
  242.         {
  243.             if(_items.Count > 0)
  244.             {
  245.                 Run(aquarium);
  246.             }
  247.             else
  248.             {
  249.                 Console.WriteLine("Аквариум пустой.");
  250.             }
  251.         }
  252.  
  253.         public void Run(Aquarium aquarium)
  254.         {
  255.             const ConsoleKey KeyMoveUp = ConsoleKey.UpArrow;
  256.             const ConsoleKey KeyMoveDown = ConsoleKey.DownArrow;
  257.             const ConsoleKey KeyPressingEnter = ConsoleKey.Enter;
  258.             const ConsoleKey KeyPressingEscape = ConsoleKey.Escape;
  259.  
  260.             bool isWork = true;
  261.  
  262.             while (isWork)
  263.             {
  264.                 if(_items.Count ==0)
  265.                 {
  266.                     isWork = false;
  267.                     Display();
  268.                 }
  269.                 else
  270.                 {
  271.                     Console.Clear();
  272.                     Display();
  273.                     ConsoleKeyInfo keyInfo;
  274.                     keyInfo = Console.ReadKey(true);
  275.  
  276.                     switch (keyInfo.Key)
  277.                     {
  278.                         case KeyMoveUp:
  279.                             MoveUp();
  280.                             break;
  281.  
  282.                         case KeyMoveDown:
  283.                             MoveDown();
  284.                             break;
  285.  
  286.                         case KeyPressingEnter:
  287.                             СhooseFish(aquarium, ref isWork);
  288.                             break;
  289.  
  290.                         case KeyPressingEscape:
  291.                             isWork = false;
  292.                             break;
  293.                     }
  294.                 }
  295.             }
  296.         }
  297.     }
  298. }
  299.  
Advertisement
Add Comment
Please, Sign In to add comment