Advertisement
vovanhik_24

#43

Oct 27th, 2023 (edited)
93
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.10 KB | None | 0 0
  1.     internal class Program
  2.     {
  3.         private static void Main(string[] args)
  4.         {
  5.             Player player = new Player();
  6.             Seller seller = new Seller();
  7.             Shop shop = new Shop();
  8.  
  9.             shop.OpenMenu(player, seller);
  10.         }
  11.     }
  12.  
  13.     class Item
  14.     {
  15.         public Item(string name, int cost)
  16.         {
  17.             Name = name;
  18.             Cost = cost;
  19.         }
  20.  
  21.         public string Name { get; }
  22.         public int Cost { get; }
  23.     }
  24.  
  25.     class Human
  26.     {
  27.         protected List<Item> Inventory;
  28.  
  29.         public Human()
  30.         {
  31.             Inventory = new List<Item>();
  32.         }
  33.  
  34.         public int Wallet { get; protected set; }
  35.  
  36.         public void AddItem(Item item)
  37.         {
  38.             Inventory.Add(item);
  39.         }
  40.  
  41.         public void AddMoney(int money)
  42.         {
  43.             Wallet += money;
  44.         }
  45.  
  46.         public void ShowItems()
  47.         {
  48.             Console.Clear();
  49.             Console.WriteLine("Список вещей: \n");
  50.  
  51.             for (int i = 0; i < Inventory.Count; i++)
  52.             {
  53.                 Console.WriteLine($"№ {i + 1}| {Inventory[i].Name} | {Inventory[i].Cost} Coin's");
  54.             }
  55.         }
  56.     }
  57.  
  58.     class Player : Human
  59.     {
  60.         public Player()
  61.         {
  62.             AddMoney(100);
  63.         }
  64.  
  65.         public void SpendMoney(int money)
  66.         {
  67.             Wallet -= money;
  68.         }
  69.  
  70.         public bool TryToPurchaseItem(int cost)
  71.         {
  72.             return Wallet >= cost;
  73.         }
  74.     }
  75.  
  76.     class Seller : Human
  77.     {
  78.         public Seller()
  79.         {
  80.             Inventory = new List<Item>() {
  81.                 new Item("Железные доспехи", 30),
  82.                 new Item("Зелье роста", 15),
  83.                 new Item("Зелье регенерации", 35),
  84.                 new Item("Магический посох", 50) };
  85.         }
  86.  
  87.         public int InventoryCount => Inventory.Count;
  88.  
  89.         public Item GetItemFromInventory(int index)
  90.         {
  91.             return Inventory[index];
  92.         }
  93.  
  94.         public void RemoveItemFromInventory(Item item)
  95.         {
  96.             Inventory.Remove(item);
  97.         }
  98.     }
  99.  
  100.     class Shop
  101.     {
  102.         public void Trade(Seller seller, Player player)
  103.         {
  104.             seller.ShowItems();
  105.  
  106.             Console.Write("\nВведите номер товара: ");
  107.             if (int.TryParse(Console.ReadLine(), out int itemNumber) == false)
  108.             {
  109.                 Console.WriteLine("Некорректный ввод");
  110.                 return;
  111.             }
  112.  
  113.             itemNumber -= 1;
  114.             int countOfSellerItems = seller.InventoryCount;
  115.  
  116.             if (itemNumber < 0 || itemNumber >= countOfSellerItems)
  117.             {
  118.                 Console.WriteLine("Некорректный номер товара");
  119.                 return;
  120.             }
  121.  
  122.             Item item = seller.GetItemFromInventory(itemNumber);
  123.  
  124.             if (player.TryToPurchaseItem(item.Cost))
  125.             {
  126.                 player.SpendMoney(item.Cost);
  127.                 player.AddItem(item);
  128.                 seller.RemoveItemFromInventory(item);
  129.             }
  130.             else
  131.             {
  132.                 Console.WriteLine("У вас недостаточно средств");
  133.             }
  134.  
  135.         }
  136.  
  137.         public void OpenMenu(Player player, Seller seller)
  138.         {
  139.             const string ShowInventoryCommand = "1";
  140.             const string ShowItemsCommand = "2";
  141.             const string BuyItemCommand = "3";
  142.             const string ExitCommand = "4";
  143.  
  144.             bool isWork = true;
  145.  
  146.             while (isWork)
  147.             {
  148.                 Console.Write($"Ваш баланс: {player.Wallet} Coin's");
  149.                 Console.WriteLine($"\n{ShowInventoryCommand} ==> Показать инвентарь." +
  150.                     $"\n{ShowItemsCommand} ==> Показать товары в магазине.\n{BuyItemCommand} ==> " +
  151.                     $"Купить предмет.\n{ExitCommand} ==> Выход.");
  152.  
  153.                 Console.Write("\nВыберите действие: ");
  154.                 string userInput = Console.ReadLine();
  155.  
  156.                 switch (userInput)
  157.                 {
  158.                     case ShowInventoryCommand:
  159.                         player.ShowItems();
  160.                         break;
  161.  
  162.                     case ShowItemsCommand:
  163.                         seller.ShowItems();
  164.                         break;
  165.  
  166.                     case BuyItemCommand:
  167.                         Trade(seller, player);
  168.                         break;
  169.  
  170.                     case ExitCommand:
  171.                         isWork = false;
  172.                         break;
  173.  
  174.                     default:
  175.                         Console.WriteLine("Некорректный ввод");
  176.                         break;
  177.                 }
  178.  
  179.                 Console.WriteLine("\nНажмите любую клавишу чтобы продолжить....");
  180.                 Console.ReadKey();
  181.                 Console.Clear();
  182.             }
  183.         }
  184.     }
Advertisement
Comments
  • vovanhik_24
    1 year
    # text 0.96 KB | 0 0
    1. 2 - public void AddItem(Item item) // AddItem(Item item) и AddMoney(int money), в идеале такие вещи красиво делать перегрузкой метода, назвав Add(), и в зависимости от типа данных, будет срабатывать нужный метод. Тем более имя метода вполне читается вместе с именем параметра, к примеру AddItem(Item item) и Add(Item item), в первом варианте в имени слово Item избыточно. Это не ошибка, и лучше оставить как есть, чтобы в лишний раз не наткнуться на отказ от ментора. Просто знай что такое есть. Перегрузка бы не помогла, если бы было два похожих метода, но отличающихся именем параметра, а не типом.
Add Comment
Please, Sign In to add comment
Advertisement