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


using System;

namespace RPGGame
{
    // Перечисление типов предметов
    enum ItemType { Weapon, Armor, Potion, Artifact }

    class GameItem
    {
        public string Name { get; set; }
        public int Power { get; set; }
        public ItemType Type { get; set; }

        public GameItem(string name, int power, ItemType type)
        {
            Name = name;
            Power = power;
            Type = type;
        }

        // 1. Оператор + : объединение предметов
        public static GameItem operator +(GameItem a, GameItem b)
        {
            string newName;
            ItemType newType;

            if (a.Type == b.Type)
            {
                newName = a.Name; // Если типы одинаковые (например, два меча), название остается
                newType = a.Type;
            }
            else
            {
                newName = "Artifact"; // Если разные — получается артефакт
                newType = ItemType.Artifact;
            }

            return new GameItem(newName, a.Power + b.Power, newType);
        }

        // 2. Оператор * : усиление предмета (например, зельем или множителем)
        public static GameItem operator *(GameItem item, int multiplier)
        {
            return new GameItem(item.Name, item.Power * multiplier, item.Type);
        }

        // 3. Оператор - : износ предмета (уменьшение силы)
        public static GameItem operator -(GameItem item, int wear)
        {
            int newPower = Math.Max(0, item.Power - wear); // Сила не может быть меньше 0
            return new GameItem(item.Name, newPower, item.Type);
        }

        // 4. Операторы > и < : сравнение силы предметов
        public static bool operator >(GameItem a, GameItem b) => a.Power > b.Power;
        public static bool operator <(GameItem a, GameItem b) => a.Power < b.Power;

        // 5. Операторы == и != : проверка равенства силы и типа
        public static bool operator ==(GameItem a, GameItem b)
        {
            return a.Power == b.Power && a.Type == b.Type;
        }
        public static bool operator !=(GameItem a, GameItem b) => !(a == b);

        public override string ToString()
        {
            return $"{Name} ({Type}), Power: {Power}";
        }
    }

    class Program
    {
        static void Main()
        {
            Console.WriteLine("--- Тестирование операторов ---");
            GameItem sword1 = new GameItem("Меч", 10, ItemType.Weapon);
            GameItem sword2 = new GameItem("Меч", 15, ItemType.Weapon);
            GameItem shield = new GameItem("Щит", 20, ItemType.Armor);
            GameItem potion = new GameItem("Зелье", 5, ItemType.Potion);

            // Примеры из задания
            Console.WriteLine(sword1 + sword2);      // Меч (Weapon), Power: 25
            Console.WriteLine(sword1 + shield);      // Artifact (Artifact), Power: 30
            Console.WriteLine(potion * 3);           // Зелье (Potion), Power: 15

            Console.WriteLine("\n--- Мини-миссия ---");
            /* Игрок имеет: Меч (10), Меч (15), Зелье (5). 
               Нужно создать лучший предмет против Босса (Power = 40).
            */
            
            // 1. Усилим зелье (предположим, у нас есть множитель или мы комбинируем его)
            // Или просто объединим всё, что есть у игрока:
            GameItem superSword = sword1 + sword2; // Меч (25)
            
            // Усилим результат зельем (в логике RPG это может быть крафт или бафф)
            GameItem finalArtifact = superSword + (potion * 3); // 25 + 15 = 40

            Console.WriteLine($"Созданный предмет: {finalArtifact}");

            int bossPower = 40;
            Console.WriteLine($"Сила босса: {bossPower}");

            if (finalArtifact.Power >= bossPower)
            {
                Console.WriteLine("Результат: Игрок победил босса!");
            }
            else
            {
                Console.WriteLine("Результат: Игрок проиграл...");
            }
        }
    }
}