CCCPaste
using System;
using System.Collections.Generic;
using System.Threading;

namespace OOP_11
{
internal class Program
{
static void Main(string[] args)
{
AquariumSimulator simulator = new AquariumSimulator(5);
simulator.Run();
}
}

class Fish
{
public Fish(string name, int maxAge)
{
Name = name;
MaxAge = maxAge;
Age = 0;
}

public string Name { get; }
public int Age { get; private set; }
public int MaxAge { get; }
public bool IsAlive => Age < MaxAge;

public void LiveOneCycle()
{
Age++;
}

public override string ToString()
{
return $"{Name} (Возраст: {Age}/{MaxAge}) {(IsAlive ? "" : "✖ Погибла")}";
}
}

class Aquarium
{
private List<Fish> _fishes;
private int _capacity;

public Aquarium(int capacity)
{
_capacity = capacity;
_fishes = new List<Fish>();
}

public void AddFish(Fish fish)
{
if (_fishes.Count >= _capacity)
{
Console.WriteLine("Аквариум переполнен! Нельзя добавить больше рыб.");
return;
}

_fishes.Add(fish);
Console.WriteLine($"Добавлена рыба: {fish.Name}");
}

public void RemoveDeadFish()
{
for (int i = 0; i < _fishes.Count; i++)
{
if (_fishes[i].IsAlive == false)
{
Console.WriteLine($"Рыба {_fishes[i].Name} умерла и удалена из аквариума.");
_fishes.RemoveAt(i);
i--;
}
}
}

public void LiveCycle()
{
foreach (var fish in _fishes)
{
fish.LiveOneCycle();
}

RemoveDeadFish();
}

public void ShowStatus()
{
Console.WriteLine("\nТекущее состояние аквариума:");

if (_fishes.Count == 0)
{
Console.WriteLine("Аквариум пуст.");
}
else
{
foreach (var fish in _fishes)
Console.WriteLine(fish);
}
}
}

class AquariumSimulator
{
private const int AddFishCommand = 1;
private const int NextCycleCommand = 2;
private const int ExitCommand = 0;

private Aquarium _aquarium;
private bool _isRunning;
private Random _random;

public AquariumSimulator(int capacity)
{
_aquarium = new Aquarium(capacity);
_isRunning = true;
_random = new Random();
}

public void Run()
{
while (_isRunning)
{
Console.Clear();
_aquarium.ShowStatus();
Console.WriteLine();

Console.WriteLine($"{AddFishCommand} - Добавить рыбу");
Console.WriteLine($"{NextCycleCommand} - Прожить один цикл");
Console.WriteLine($"{ExitCommand} - Выход");
Console.Write("Выбор: ");

string input = Console.ReadLine();
Console.WriteLine();

if (int.TryParse(input, out int choice) == false)
{
Console.WriteLine("Введите число от 1 до 6.\n");
continue;
}

switch (choice)
{
case AddFishCommand:
AddFish();
break;

case NextCycleCommand:
NextCycle();
break;

case ExitCommand:
Exit();
break;

default:
Console.WriteLine("Неверный выбор. Повторите попытку.");
break;
}

Thread.Sleep(1000);
}
}

private void AddFish()
{
int startAge = 1;
int endAge = 10;

Console.Write("Введите имя рыбы: ");
string name = Console.ReadLine();
int maxAge = _random.Next(startAge, endAge);
_aquarium.AddFish(new Fish(name, maxAge));
}

private void NextCycle()
{
_aquarium.LiveCycle();
}

private void Exit()
{
_isRunning = false;
}
}
}