Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- internal class Program
- {
- private static void Main(string[] args)
- {
- Player player = new Player();
- Seller seller = new Seller();
- Shop shop = new Shop();
- shop.OpenMenu(player, seller);
- }
- }
- class Item
- {
- public Item(string name, int cost)
- {
- Name = name;
- Cost = cost;
- }
- public string Name { get; }
- public int Cost { get; }
- }
- class Human
- {
- protected List<Item> Inventory;
- public Human()
- {
- Inventory = new List<Item>();
- }
- public int Wallet { get; protected set; }
- public void AddItem(Item item)
- {
- Inventory.Add(item);
- }
- public void AddMoney(int money)
- {
- Wallet += money;
- }
- public void ShowItems()
- {
- Console.Clear();
- Console.WriteLine("Список вещей: \n");
- for (int i = 0; i < Inventory.Count; i++)
- {
- Console.WriteLine($"№ {i + 1}| {Inventory[i].Name} | {Inventory[i].Cost} Coin's");
- }
- }
- }
- class Player : Human
- {
- public Player()
- {
- AddMoney(100);
- }
- public void SpendMoney(int money)
- {
- Wallet -= money;
- }
- public bool TryToPurchaseItem(int cost)
- {
- return Wallet >= cost;
- }
- }
- class Seller : Human
- {
- public Seller()
- {
- Inventory = new List<Item>() {
- new Item("Железные доспехи", 30),
- new Item("Зелье роста", 15),
- new Item("Зелье регенерации", 35),
- new Item("Магический посох", 50) };
- }
- public int InventoryCount => Inventory.Count;
- public Item GetItemFromInventory(int index)
- {
- return Inventory[index];
- }
- public void RemoveItemFromInventory(Item item)
- {
- Inventory.Remove(item);
- }
- }
- class Shop
- {
- public void Trade(Seller seller, Player player)
- {
- seller.ShowItems();
- Console.Write("\nВведите номер товара: ");
- if (int.TryParse(Console.ReadLine(), out int itemNumber) == false)
- {
- Console.WriteLine("Некорректный ввод");
- return;
- }
- itemNumber -= 1;
- int countOfSellerItems = seller.InventoryCount;
- if (itemNumber < 0 || itemNumber >= countOfSellerItems)
- {
- Console.WriteLine("Некорректный номер товара");
- return;
- }
- Item item = seller.GetItemFromInventory(itemNumber);
- if (player.TryToPurchaseItem(item.Cost))
- {
- player.SpendMoney(item.Cost);
- player.AddItem(item);
- seller.RemoveItemFromInventory(item);
- }
- else
- {
- Console.WriteLine("У вас недостаточно средств");
- }
- }
- public void OpenMenu(Player player, Seller seller)
- {
- const string ShowInventoryCommand = "1";
- const string ShowItemsCommand = "2";
- const string BuyItemCommand = "3";
- const string ExitCommand = "4";
- bool isWork = true;
- while (isWork)
- {
- Console.Write($"Ваш баланс: {player.Wallet} Coin's");
- Console.WriteLine($"\n{ShowInventoryCommand} ==> Показать инвентарь." +
- $"\n{ShowItemsCommand} ==> Показать товары в магазине.\n{BuyItemCommand} ==> " +
- $"Купить предмет.\n{ExitCommand} ==> Выход.");
- Console.Write("\nВыберите действие: ");
- string userInput = Console.ReadLine();
- switch (userInput)
- {
- case ShowInventoryCommand:
- player.ShowItems();
- break;
- case ShowItemsCommand:
- seller.ShowItems();
- break;
- case BuyItemCommand:
- Trade(seller, player);
- break;
- case ExitCommand:
- isWork = false;
- break;
- default:
- Console.WriteLine("Некорректный ввод");
- break;
- }
- Console.WriteLine("\nНажмите любую клавишу чтобы продолжить....");
- Console.ReadKey();
- Console.Clear();
- }
- }
- }
Advertisement
Comments
-
- 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