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


using System;
using System.Collections.Generic;

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;
        }

        // Перегрузка + для объединения
        public static GameItem operator +(GameItem a, GameItem b)
        {
            string newName = (a.Type == b.Type) ? $"Улучшенный {a.Name}" : "Артефакт";
            ItemType newType = (a.Type == b.Type) ? a.Type : ItemType.Artifact;
            return new GameItem(newName, a.Power + b.Power, newType);
        }

        public override string ToString() => $"[{Name} | Сила: {Power} | Тип: {Type}]";
    }

    class Program
    {
        // Инвентарь игрока
        static List<GameItem> inventory = new List<GameItem>();

        static void Main()
        {
            // Стартовый набор
            inventory.Add(new GameItem("Простой Меч", 10, ItemType.Weapon));
            inventory.Add(new GameItem("Ржавый Кинжал", 5, ItemType.Weapon));

            while (true)
            {
                Console.Clear();
                Console.WriteLine("=== ГЛАВНОЕ МЕНЮ RPG ===");
                Console.WriteLine("1. Посмотреть инвентарь");
                Console.WriteLine("2. Создать новый предмет");
                Console.WriteLine("3. Объединить предметы (Крафт)");
                Console.WriteLine("4. Отправиться на Мини-миссию (Сила 20)");
                Console.WriteLine("5. Бросить вызов БОССУ (Сила 50)");
                Console.WriteLine("0. Выход");
                Console.Write("\nВаш выбор: ");

                string choice = Console.ReadLine();

                switch (choice)
                {
                    case "1": ShowInventory(); break;
                    case "2": CreateItem(); break;
                    case "3": CraftItem(); break;
                    case "4": GoToMission("Мини-миссия", 20); break;
                    case "5": GoToMission("БОСС", 50); break;
                    case "0": return;
                }
                Console.WriteLine("\nНажмите любую клавишу, чтобы вернуться в меню...");
                Console.ReadKey();
            }
        }

        static void ShowInventory()
        {
            Console.WriteLine("\n--- Ваш инвентарь ---");
            for (int i = 0; i < inventory.Count; i++)
            {
                Console.WriteLine($"{i + 1}. {inventory[i]}");
            }
        }

        static void CreateItem()
        {
            Console.Write("Введите название: ");
            string name = Console.ReadLine();
            Console.Write("Введите силу (число): ");
            int power = int.Parse(Console.ReadLine() ?? "0");
            
            inventory.Add(new GameItem(name, power, ItemType.Weapon));
            Console.WriteLine("Предмет создан!");
        }

        static void CraftItem()
        {
            ShowInventory();
            if (inventory.Count < 2)
            {
                Console.WriteLine("Нужно минимум 2 предмета для крафта!");
                return;
            }

            Console.Write("Номер первого предмета: ");
            int idx1 = int.Parse(Console.ReadLine()) - 1;
            Console.Write("Номер второго предмета: ");
            int idx2 = int.Parse(Console.ReadLine()) - 1;

            if (idx1 >= 0 && idx2 >= 0 && idx1 < inventory.Count && idx2 < inventory.Count && idx1 != idx2)
            {
                GameItem newItem = inventory[idx1] + inventory[idx2];
                
                // Удаляем старые, добавляем новый (удаляем с конца, чтобы индексы не поехали)
                if (idx1 > idx2) { inventory.RemoveAt(idx1); inventory.RemoveAt(idx2); }
                else { inventory.RemoveAt(idx2); inventory.RemoveAt(idx1); }

                inventory.Add(newItem);
                Console.WriteLine($"Успех! Получен новый предмет: {newItem}");
            }
        }

        static void GoToMission(string name, int requiredPower)
        {
            Console.WriteLine($"\n--- Поход: {name} ---");
            int totalPower = 0;
            foreach (var item in inventory) totalPower += item.Power;

            Console.WriteLine($"Ваша суммарная сила: {totalPower}");
            Console.WriteLine($"Требуемая сила: {requiredPower}");

            if (totalPower >= requiredPower)
            {
                Console.WriteLine($"ПОБЕДА! Вы прошли уровень '{name}'.");
                if (name == "БОСС") Console.WriteLine("ПОЗДРАВЛЯЕМ! Игра пройдена!");
            }
            else
            {
                Console.WriteLine($"ПОРАЖЕНИЕ... Вам не хватило {requiredPower - totalPower} силы.");
            }
        }
    }
}