Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- namespace CSLight
- {
- class Program
- {
- private static void Main()
- {
- List<Fish> allFish = new List<Fish>
- {
- new СockerelFish(0),
- new CatFish(0),
- new GoldFish(0),
- new Molliesia(0),
- new ZebraFish(0)
- };
- Aquarium aquarium = new Aquarium(new List<Fish>
- {
- new CatFish(1),
- new СockerelFish(0),
- new GoldFish(4),
- new ZebraFish(2),
- new Molliesia(0)
- });
- while (true)
- {
- Console.Clear();
- aquarium.ShowAquarium();
- Console.WriteLine("Что Вы хотите сделать?\n 1 - Добавить рыбку\n 2 - Удалить рыбку\n" +
- " 3 - Перейти к следующему году проживания аквариума\n");
- switch (Console.ReadLine())
- {
- case "1":
- AddFish(aquarium, allFish);
- break;
- case "2":
- RemoveFish(aquarium);
- break;
- case "3":
- MakeIteration(aquarium);
- break;
- default:
- continue;
- }
- }
- }
- private static void AddFish(Aquarium aquarium, List<Fish> allFish)
- {
- Console.Clear();
- if (aquarium.FishCount >= aquarium.MaxFishCount)
- {
- Printer.Print("Достигнуто максимальное количество рыбок в аквариуме...\n\n", ConsoleColor.DarkRed);
- Printer.Print("Нажмите любую клавишу, чтобы продолжить...");
- Console.ReadKey();
- return;
- }
- Console.WriteLine("Какую бы рыбку Вы хотели добавить? (укажите номер рыбки)\n");
- for (int i = 0; i < allFish.Count; i++)
- Printer.Print($" {i + 1} - {allFish[i].Name}\n", allFish[i].Color);
- Console.Write("\nВаш ответ: ");
- if (int.TryParse(Console.ReadLine(), out int indexFish) && indexFish > 0 && indexFish < allFish.Count + 1)
- {
- Fish fish = (Fish)allFish[indexFish - 1].Clone();
- aquarium.AddFish(fish);
- }
- }
- private static void RemoveFish(Aquarium aquarium)
- {
- Console.Clear();
- aquarium.ShowAquarium();
- Console.WriteLine("Какую бы рыбку Вы хотели удалить? (укажите номер рыбки)");
- Console.Write("\nВаш ответ: ");
- if (int.TryParse(Console.ReadLine(), out int indexFish) && indexFish > 0 && indexFish < aquarium.FishCount + 1)
- aquarium.RemoveFishAt(indexFish - 1);
- }
- private static void MakeIteration(Aquarium aquarium)
- {
- for (int i = 0; i < aquarium.FishCount; i++)
- {
- Fish fish = aquarium[i];
- fish.IncrementAge();
- if (fish.Age > fish.DeathAge)
- aquarium.RemoveFishAt(i);
- }
- }
- }
- class Aquarium : IEnumerable
- {
- public int FishCount => _fishInAquarium.Count;
- public int MaxFishCount { get; }
- private List<Fish> _fishInAquarium;
- private static readonly Random Rand = new Random();
- public Aquarium(List<Fish> fishInAquarium)
- {
- _fishInAquarium = fishInAquarium;
- MaxFishCount = Rand.Next(10, 20);
- }
- public void AddFish(Fish fish)
- {
- _fishInAquarium.Add(fish);
- }
- public void RemoveFish(Fish fish)
- {
- int index = _fishInAquarium.FindIndex(item => item == fish);
- if (index < 0)
- return;
- _fishInAquarium.RemoveAt(index);
- }
- public void RemoveFishAt(int index)
- {
- if (index < 0 || index >= _fishInAquarium.Count)
- return;
- _fishInAquarium.RemoveAt(index);
- }
- public void ShowAquarium()
- {
- if (_fishInAquarium.Count == 0)
- {
- Printer.Print("В аквариуме нет ни одной рыбки...\n\n", ConsoleColor.DarkRed);
- return;
- }
- Printer.Print("Население аквариума в данный момент:\n\n", ConsoleColor.Green);
- for (int i = 0; i < _fishInAquarium.Count; i++)
- {
- Printer.Print($"{i + 1}. {_fishInAquarium[i].Name}\n" +
- $" Возраст рыбы: {_fishInAquarium[i].Age} лет\n" +
- $" Возраст смерти: {_fishInAquarium[i].DeathAge} лет\n\n", _fishInAquarium[i].Color);
- }
- }
- public Fish this[int index]
- {
- get
- {
- if (index < 0 || index >= _fishInAquarium.Count)
- throw new ArgumentException("Некорректный номер рыбы.");
- return _fishInAquarium[index];
- }
- }
- public IEnumerator GetEnumerator()
- {
- return new AquariumEnumerator(_fishInAquarium);
- }
- class AquariumEnumerator : IEnumerator
- {
- private List<Fish> _fishInAquarium;
- private int indexPosition = -1;
- public AquariumEnumerator(List<Fish> fishInAquarium)
- {
- _fishInAquarium = fishInAquarium;
- }
- public bool MoveNext()
- {
- indexPosition++;
- return indexPosition < _fishInAquarium.Count;
- }
- public void Reset()
- {
- indexPosition = -1;
- }
- public object Current => _fishInAquarium[indexPosition];
- }
- }
- abstract class Fish : ICloneable
- {
- public string Name { get; protected set; }
- public int Age { get; protected set; }
- public int DeathAge { get; protected set; }
- public ConsoleColor Color { get; protected set; }
- protected static readonly Random Rand = new Random();
- public void IncrementAge()
- {
- Age++;
- }
- public object Clone()
- {
- return MemberwiseClone();
- }
- }
- class GoldFish : Fish
- {
- public GoldFish(int age)
- {
- Age = age;
- Name = "Золотая рыбка";
- DeathAge = Rand.Next(10, 16);
- Color = ConsoleColor.DarkYellow;
- }
- }
- class CatFish : Fish
- {
- public CatFish(int age)
- {
- Age = age;
- Name = "Панцирный сом";
- DeathAge = Rand.Next(7, 16);
- Color = ConsoleColor.DarkRed;
- }
- }
- class ZebraFish : Fish
- {
- public ZebraFish(int age)
- {
- Age = age;
- Name = "Данио";
- DeathAge = Rand.Next(5, 8);
- Color = ConsoleColor.Cyan;
- }
- }
- class Molliesia : Fish
- {
- public Molliesia(int age)
- {
- Age = age;
- Name = "Моллинезия";
- DeathAge = Rand.Next(4, 6);
- Color = ConsoleColor.DarkGray;
- }
- }
- class СockerelFish : Fish
- {
- public СockerelFish(int age)
- {
- Age = age;
- Name = "Петушок";
- DeathAge = Rand.Next(2, 4);
- Color = ConsoleColor.DarkCyan;
- }
- }
- class Printer
- {
- public static void Print(string text, ConsoleColor color = ConsoleColor.White)
- {
- ConsoleColor defaultColor = Console.ForegroundColor;
- Console.ForegroundColor = color;
- Console.Write(text);
- Console.ForegroundColor = defaultColor;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement