Загрузка данных


using System;

namespace EnhancedManGame
{
    class Program
    {
        static void Main(string[] args)
        {
            string userCommand = "";
            bool infinity = true;
            Man someMan = null;
            
            Console.WriteLine("=== РАСШИРЕННАЯ ИГРА 'ЧЕЛОВЕК' ===\n");
            
            while (infinity)
            {
                Console.WriteLine("Пожалуйста, введите команду");
                userCommand = Console.ReadLine().ToLower();
                
                switch (userCommand)
                {
                    case "exit":
                        infinity = false;
                        Console.WriteLine("Программа завершена.");
                        break;
                        
                    case "help":
                        ShowHelp();
                        break;
                        
                    case "create_man":
                        if (someMan != null)
                        {
                            Console.WriteLine($"{someMan.GetName()} уже существует и будет заменен.");
                            someMan.Kill();
                        }
                        
                        Console.WriteLine("Пожалуйста, введите имя создаваемого человека:");
                        string name = Console.ReadLine();
                        
                        if (!string.IsNullOrWhiteSpace(name))
                        {
                            someMan = new Man(name);
                            Console.WriteLine($"\nЧеловек по имени {name} успешно создан!");
                            Console.WriteLine($"Возраст: {someMan.GetAge()}, Здоровье: {someMan.GetHealth()}/100");
                            Console.WriteLine($"Сила: {someMan.GetStrength()}, Ловкость: {someMan.GetAgility()}");
                        }
                        else
                        {
                            Console.WriteLine("Имя не может быть пустым!");
                        }
                        break;
                        
                    case "status":
                        if (someMan != null)
                        {
                            someMan.ShowStatus();
                        }
                        else
                        {
                            Console.WriteLine("Сначала создайте человека командой create_man!");
                        }
                        break;
                        
                    case "talk":
                        if (someMan != null && someMan.IsAlive())
                        {
                            someMan.Talk();
                        }
                        else if (someMan != null && !someMan.IsAlive())
                        {
                            Console.WriteLine($"{someMan.GetName()} не может говорить, он умер.");
                        }
                        else
                        {
                            Console.WriteLine("Сначала создайте человека командой create_man!");
                        }
                        break;
                        
                    case "go":
                        if (someMan != null && someMan.IsAlive())
                        {
                            someMan.Go();
                        }
                        else if (someMan != null && !someMan.IsAlive())
                        {
                            Console.WriteLine($"{someMan.GetName()} не может идти, он умер.");
                        }
                        else
                        {
                            Console.WriteLine("Сначала создайте человека командой create_man!");
                        }
                        break;
                        
                    case "fight":
                        if (someMan != null && someMan.IsAlive())
                        {
                            someMan.Fight();
                        }
                        else if (someMan != null && !someMan.IsAlive())
                        {
                            Console.WriteLine($"{someMan.GetName()} не может драться, он умер.");
                        }
                        else
                        {
                            Console.WriteLine("Сначала создайте человека командой create_man!");
                        }
                        break;
                        
                    case "medkit":
                        if (someMan != null && someMan.IsAlive())
                        {
                            someMan.UseMedKit();
                        }
                        else if (someMan != null && !someMan.IsAlive())
                        {
                            Console.WriteLine("Аптечка не поможет мертвому!");
                        }
                        else
                        {
                            Console.WriteLine("Сначала создайте человека командой create_man!");
                        }
                        break;
                        
                    case "kill_man":
                        if (someMan != null)
                        {
                            if (someMan.IsAlive())
                            {
                                someMan.Kill();
                                Console.WriteLine($"{someMan.GetName()} был убит.");
                            }
                            else
                            {
                                Console.WriteLine($"{someMan.GetName()} уже мертв.");
                            }
                        }
                        else
                        {
                            Console.WriteLine("Сначала создайте человека командой create_man!");
                        }
                        break;
                        
                    case "is_alive":
                        if (someMan != null)
                        {
                            if (someMan.IsAlive())
                            {
                                Console.WriteLine($"{someMan.GetName()} жив.");
                            }
                            else
                            {
                                Console.WriteLine($"{someMan.GetName()} мертв.");
                            }
                        }
                        else
                        {
                            Console.WriteLine("Человек еще не создан!");
                        }
                        break;
                        
                    default:
                        Console.WriteLine("Команда не определена. Введите 'help' для списка команд.");
                        break;
                }
                
                Console.WriteLine();
            }
        }
        
        static void ShowHelp()
        {
            Console.WriteLine("\n=== СПИСОК КОМАНД ===");
            Console.WriteLine("create_man - создать нового человека");
            Console.WriteLine("status      - показать статус человека");
            Console.WriteLine("talk        - заставить человека говорить (случайная фраза из 10)");
            Console.WriteLine("go          - заставить человека идти");
            Console.WriteLine("fight       - начать драку (5 видов ударов)");
            Console.WriteLine("medkit      - использовать аптечку");
            Console.WriteLine("kill_man    - убить человека");
            Console.WriteLine("is_alive    - проверить, жив ли человек");
            Console.WriteLine("help        - показать этот список");
            Console.WriteLine("exit        - выйти из программы");
            Console.WriteLine("=====================\n");
        }
    }
    
    public class Man
    {
        private string name;
        private uint age;
        private uint health;
        private uint strength;
        private uint agility;
        private bool isLife;
        private uint medKits;
        
        private Random rnd = new Random();
        
        public Man(string _name)
        {
            name = _name;
            isLife = true;
            
            age = (uint)rnd.Next(15, 51);
            health = (uint)rnd.Next(50, 101);
            strength = (uint)rnd.Next(30, 91);
            agility = (uint)rnd.Next(30, 91);
            medKits = 1;
        }
        
        public string GetName() { return name; }
        public uint GetAge() { return age; }
        public uint GetHealth() { return health; }
        public uint GetStrength() { return strength; }
        public uint GetAgility() { return agility; }
        
        public void ShowStatus()
        {
            Console.WriteLine($"\n=== СТАТУС {name.ToUpper()} ===");
            Console.WriteLine($"Состояние: {(isLife ? "ЖИВ" : "МЕРТВ")}");
            Console.WriteLine($"Возраст: {age} лет");
            Console.WriteLine($"Здоровье: {health}/100");
            Console.WriteLine($"Сила: {strength}/100");
            Console.WriteLine($"Ловкость: {agility}/100");
            Console.WriteLine($"Аптечки: {medKits}");
            Console.WriteLine("=====================\n");
        }
        
        public void Talk()
        {
            int randomTalk = rnd.Next(1, 11);
            string phrase = "";
            
            switch (randomTalk)
            {
                case 1:
                    phrase = "Привет, меня зовут " + name + ", рад познакомиться!";
                    break;
                case 2:
                    phrase = "Мне " + age + " лет. А тебе сколько?";
                    break;
                case 3:
                    if (health > 70)
                        phrase = "Чувствую себя отлично! Здоровье просто супер!";
                    else if (health > 40)
                        phrase = "Чувствую себя нормально, но могло быть и лучше.";
                    else
                        phrase = "Чувствую себя неважно...";
                    break;
                case 4:
                    phrase = "Какой прекрасный день сегодня!";
                    break;
                case 5:
                    phrase = "Я могу поднять " + (strength / 10) + "0 кг!";
                    break;
                case 6:
                    phrase = "Моя ловкость позволяет мне уворачиваться от ударов!";
                    break;
                case 7:
                    phrase = "У меня есть " + medKits + " аптечка" + (medKits == 1 ? "" : "ки") + " на случай ранения.";
                    break;
                case 8:
                    phrase = "Я готов к приключениям!";
                    break;
                case 9:
                    phrase = "Иногда мне кажется, что я становлюсь старше...";
                    break;
                case 10:
                    phrase = "Жизнь - это прекрасное приключение!";
                    break;
            }
            
            Console.WriteLine($"{name}: {phrase}");
        }
        
        public void Go()
        {
            if (!isLife)
            {
                Console.WriteLine($"{name} не может идти, он умер.");
                return;
            }
            
            if (health > 60)
            {
                Console.WriteLine($"{name} быстро и уверенно идет по дороге.");
            }
            else if (health > 30)
            {
                Console.WriteLine($"{name} медленно идет, чувствуя усталость.");
            }
            else
            {
                Console.WriteLine($"{name} еле передвигает ноги, ему нужен отдых.");
                health = (uint)Math.Max(0, health - 5);
                Console.WriteLine($"Здоровье уменьшилось до {health}");
            }
        }
        
        public void Fight()
        {
            if (!isLife)
            {
                Console.WriteLine($"{name} не может драться, он умер.");
                return;
            }
            
            Console.WriteLine($"\n=== {name} ВСТУПАЕТ В БОЙ ===");
            Console.WriteLine("Выберите тип удара:");
            Console.WriteLine("1. Легкий джеб (малый урон, высокая точность)");
            Console.WriteLine("2. Прямой удар (средний урон, средняя точность)");
            Console.WriteLine("3. Хук (большой урон, низкая точность)");
            Console.WriteLine("4. Удар ногой (очень большой урон, очень низкая точность)");
            Console.WriteLine("5. Специальный прием (зависит от ловкости)");
            Console.WriteLine("0. Отмена боя");
            
            string choice = Console.ReadLine();
            int damage = 0;
            string attackName = "";
            int accuracy = 0;
            
            switch (choice)
            {
                case "1":
                    attackName = "Легкий джеб";
                    damage = rnd.Next(5, 15);
                    accuracy = 90;
                    break;
                case "2":
                    attackName = "Прямой удар";
                    damage = rnd.Next(15, 30);
                    accuracy = 70;
                    break;
                case "3":
                    attackName = "Хук";
                    damage = rnd.Next(25, 45);
                    accuracy = 50;
                    break;
                case "4":
                    attackName = "Удар ногой";
                    damage = rnd.Next(40, 60);
                    accuracy = 30;
                    break;
                case "5":
                    attackName = "Специальный прием";
                    damage = (int)(agility / 2) + rnd.Next(10, 20);
                    accuracy = 60;
                    break;
                case "0":
                    Console.WriteLine($"{name} отступил от боя.");
                    return;
                default:
                    Console.WriteLine("Неверный выбор! Бой пропущен.");
                    return;
            }
            
            int hitChance = rnd.Next(1, 101);
            bool isHit = hitChance <= accuracy;
            
            Console.WriteLine($"\n{name} использует: {attackName}");
            Console.WriteLine($"Точность атаки: {accuracy}% (выпало: {hitChance})");
            
            if (isHit)
            {
                int finalDamage = damage + (int)(strength / 20);
                Console.WriteLine($"ПОПАДАНИЕ! Нанесено урона: {finalDamage}");
                
                health = (uint)Math.Max(0, health - finalDamage);
                Console.WriteLine($"Здоровье {name}: {health}/100");
                
                if (health == 0)
                {
                    Console.WriteLine($"\n{name} ПОТЕРЯЛ СОЗНАНИЕ!");
                    isLife = false;
                }
                else if (health < 20)
                {
                    Console.WriteLine($"{name} тяжело ранен и нуждается в медицинской помощи!");
                }
                else if (health < 50)
                {
                    Console.WriteLine($"{name} получил серьезные повреждения.");
                }
            }
            else
            {
                Console.WriteLine("ПРОМАХ! Противник увернулся от удара.");
            }
            
            Console.WriteLine("=====================\n");
        }
        
        public void UseMedKit()
        {
            if (!isLife)
            {
                Console.WriteLine("Аптечка не поможет мертвому!");
                return;
            }
            
            if (medKits > 0)
            {
                medKits--;
                uint healAmount = (uint)rnd.Next(20, 51);
                health = Math.Min(100, health + healAmount);
                
                Console.WriteLine($"{name} использует аптечку.");
                Console.WriteLine($"Восстановлено здоровья: +{healAmount}");
                Console.WriteLine($"Текущее здоровье: {health}/100");
                Console.WriteLine($"Осталось аптечек: {medKits}");
                
                if (rnd.Next(1, 6) == 1)
                {
                    Console.WriteLine("Вы нашли еще одну аптечку во время лечения!");
                    medKits++;
                }
            }
            else
            {
                Console.WriteLine($"У {name} нет аптечек!");
                Console.WriteLine("Аптечки можно найти во время боя или лечения.");
            }
        }
        
        public void Kill()
        {
            isLife = false;
        }
        
        public bool IsAlive()
        {
            return isLife;
        }
    }
}