Skip to content

Instantly share code, notes, and snippets.

@tsk-arh
Last active February 9, 2024 19:48
Show Gist options
  • Save tsk-arh/704734a4a9f48b2e9125ec385b9d87f2 to your computer and use it in GitHub Desktop.
Save tsk-arh/704734a4a9f48b2e9125ec385b9d87f2 to your computer and use it in GitHub Desktop.
ЗАДАНИЕ Зоопарк
using System;
using System.Collections.Generic;
namespace ConsoleApp9
{
internal class Program
{
static void Main(string[] args)
{
Zoo zoo = new Zoo();
zoo.Work();
}
}
class Zoo
{
public void Work()
{
const string CommandExit = "уйти";
List<Aviary> aviarys = GetFillAviarys();
bool isRuning = true;
while (isRuning)
{
Console.Clear();
Console.WriteLine("На карте зоопарка вы видите несколько вальеров:");
ShowAllAviarys(aviarys);
Console.WriteLine($"Введите номер вальера, к которому хотите подойти, или введите '{CommandExit}', чтобы выйти из зоопарка");
string userInput = Console.ReadLine();
if (userInput == CommandExit)
{
isRuning = false;
}
else if(int.TryParse(userInput, out int userNumber) && userNumber > 0 && userNumber <= aviarys.Count)
{
int index = userNumber - 1;
ShowAviaryContent(aviarys[index]);
Console.WriteLine("\nНажмите любую клавишу для продолжения");
Console.ReadKey(true);
}
}
}
private List<Aviary> GetFillAviarys()
{
List<Aviary> aviarys = new List<Aviary>();
int aviarysCount = 7;
for (int i = 0; i < aviarysCount; i++)
{
aviarys.Add(new Aviary());
}
return aviarys;
}
private void ShowAllAviarys(List<Aviary> aviarys)
{
for (int i = 0; i < aviarys.Count; i++)
{
Console.WriteLine($"{aviarys[i].NumberName} Вальер. В нем живет {aviarys[i].NameAnimalInside}");
}
}
private void ShowAviaryContent(Aviary aviary)
{
Console.WriteLine($"\nВ вольере {aviary.NameAnimalInside} содержаться животных всего: {aviary.GetAnimalsCount()} ");
aviary.ShowSexAnimalsStatistic();
}
}
class Animal
{
public Animal(string name, string sound)
{
Name = name;
Sound = sound;
Sex = GetRandomGender();
}
public string Name { get; private set; }
public string Sex { get; private set; }
public string Sound { get; private set; }
private string GetRandomGender()
{
List<string> sexVariations = new List<string>
{
"мужской",
"женский"
};
return sexVariations[UserUtils.GenerateRandomIndex(sexVariations.Count)];
}
}
class Aviary
{
private static int s_numberName = 1;
private static Nature s_nature = new Nature();
private List<Animal> _animals;
public Aviary()
{
int indexAnimal = GetRandomIndexAnimalType();
_animals = new List<Animal>();
NameAnimalInside = s_nature.GetAnimalName(indexAnimal);
Fill(indexAnimal);
s_nature.RemoveAnimal(indexAnimal);
NumberName = s_numberName++;
}
public int NumberName { get; private set; }
public string NameAnimalInside { get; private set; }
public int GetAnimalsCount() =>
_animals.Count;
public void ShowSexAnimalsStatistic()
{
Dictionary<string, int> statisticSex = new Dictionary<string, int>();
for (int i = 0; i < _animals.Count; i++)
{
if (statisticSex.ContainsKey(_animals[i].Sex))
{
int temporaryNumber = statisticSex[_animals[i].Sex] + 1;
statisticSex.Remove(_animals[i].Sex);
statisticSex.Add(_animals[i].Sex, temporaryNumber);
}
else
{
int firstCoincidence = 1;
statisticSex.Add(_animals[i].Sex, firstCoincidence);
}
}
Console.WriteLine(new string('-', 45) + $"\nНазвание животного: {_animals[0].Name}" +
$"\nЗвук который оно издает: {_animals[0].Sound}\n" +
new string('-', 45));
foreach (var item in statisticSex)
{
Console.WriteLine($"Пол: {item.Key} количество в вольере: {item.Value}");
}
}
private int GetRandomIndexAnimalType()
{
int indexRandomAnimal = UserUtils.GenerateRandomIndex(s_nature.GetAnimalsCount());
return indexRandomAnimal;
}
private void Fill(int indexAnimal)
{
int minimumCountAnimals = 1;
int maximumCountAnimals = 5;
int countAnimals = UserUtils.GenerateRandomNumber(minimumCountAnimals, maximumCountAnimals);
for (int i = 0; i < countAnimals; i++)
{
_animals.Add(s_nature.GetAnimal(indexAnimal));
}
}
}
class Nature
{
private List<Animal> _animals;
public Nature()
{
_animals = new List<Animal>();
AddAnimals();
}
public int GetAnimalsCount() =>
_animals.Count;
public string GetAnimalName(int index)
{
return _animals[index].Name;
}
public Animal GetAnimal(int indexAnimal)
{
Animal animal = _animals[indexAnimal];
AddNewForReplacementAnimal(animal);
_animals.Remove(animal);
return animal;
}
public void RemoveAnimal(int index)
{
_animals.RemoveAt(index);
}
private void AddNewForReplacementAnimal(Animal animal)
{
_animals.Insert(_animals.IndexOf(animal), new Animal(animal.Name, animal.Sound));
}
private void AddAnimals()
{
_animals.AddRange(new Animal[] {
new Animal ("Свинья", "хрю"),
new Animal ("Корова","му"),
new Animal ("Попугай говорящий","э, птица, сюда лети епт"),
new Animal ("Хомяк","пипипи"),
new Animal ("Кошка","мяу"),
new Animal ("Собака","гав"),
new Animal ("Homosapiens современный","я не самоопределяю себя как человека какого либо пола, и требую уважения к своим правам"),
new Animal ("Голубь","гульгульгуль"),
new Animal ("Тигр", "рррррррр"),
new Animal ("Утконос", "йа утка"),
new Animal ("Енот", "полоскаю")
});
}
}
static class UserUtils
{
private static Random s_random = new Random();
public static int GenerateRandomNumber(int min, int max) =>
s_random.Next(min, max + 1);
public static int GenerateRandomIndex(int max) =>
s_random.Next(max);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment