Advertisement
MaoChessy

Task 31 - fix

Nov 9th, 2020 (edited)
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace C_sharp_Light
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             Console.CursorVisible = false;
  11.             TradeRoom tradeRoom = new TradeRoom(new Player());
  12.             tradeRoom.Work();
  13.         }
  14.     }
  15.     public static class RandomStatic
  16.     {
  17.         static private Random _rand = new Random();
  18.  
  19.         static public int GetNext(int min, int max)
  20.         {
  21.             return _rand.Next(min, max);
  22.  
  23.         }
  24.         static public int GetNext(int max)
  25.         {
  26.             return _rand.Next(max);
  27.         }
  28.     }
  29.  
  30.     public static class Messager
  31.     {
  32.         static public void ShowMessageWithColor(string message, ConsoleColor color, bool delay)
  33.         {
  34.             ConsoleColor defaultColor = Console.ForegroundColor;
  35.             Console.ForegroundColor = color;
  36.             Console.WriteLine(message);
  37.             Console.ForegroundColor = defaultColor;
  38.             if (delay)
  39.                 Console.ReadKey();
  40.         }
  41.     }
  42.  
  43.     class Item
  44.     {
  45.         public int Cost { get; private set; }
  46.         public string Name { get; private set; }
  47.         public Item()
  48.         {
  49.             Name = new string[] { "Железный меч", "Рогатый шлем", "Посох огня", "Кожаный сапоги", "Сладкий рулет" }[RandomStatic.GetNext(0, 5)];
  50.             Cost = RandomStatic.GetNext(20, 150);
  51.         }
  52.         public string GetInfo()
  53.         {
  54.             return $"{Name} стоит - {Cost}";
  55.         }
  56.     }
  57.     class Person
  58.     {
  59.         public string Name { get; private set; }
  60.         public int Money { get { return _money; } }
  61.         protected int _money;
  62.         protected List<Item> _inventory = new List<Item>();
  63.         public Person(string name, int money)
  64.         {
  65.             _money = money;
  66.             Name = name;
  67.             int amountItems = RandomStatic.GetNext(3, 9);
  68.             for (int i = 0; i < amountItems; i++)
  69.             {
  70.                 _inventory.Add(new Item());
  71.             }
  72.         }
  73.         public string GetInfoAboutAllItem()
  74.         {
  75.             string result = "";
  76.             for (int i = 0; i < _inventory.Count; i++)
  77.             {
  78.                 result += $"{i}:{_inventory[i].GetInfo()}\n";
  79.             }
  80.             return result;
  81.         }
  82.     }
  83.     class Player : Person
  84.     {
  85.         public Player() : base("Player",1500){     }
  86.         public void Buy(Item item)
  87.         {
  88.             _inventory.Add(item);
  89.             _money -= item.Cost;
  90.             Messager.ShowMessageWithColor($"{item.Name} - Куплен", ConsoleColor.Green, true);
  91.         }
  92.         public bool ExploreAboutPossibleToBuy(Item iten)
  93.         {
  94.             if (Money >= iten.Cost) return true;
  95.             else return false;
  96.         }
  97.         public void GetInfo()
  98.         {
  99.             Messager.ShowMessageWithColor(Name, ConsoleColor.Green, false);
  100.             Messager.ShowMessageWithColor(GetInfoAboutAllItem(), ConsoleColor.White, false);
  101.             Messager.ShowMessageWithColor($"\nВаши деньги: {Money}", ConsoleColor.Yellow, false);
  102.         }
  103.     }
  104.     class Trader : Person
  105.     {
  106.         public int SelectedIndexItem { get; private set; } = 0;
  107.         public Trader() : base("Торговец",RandomStatic.GetNext(300,900)){}
  108.         public int GetSizeInventory()
  109.         {
  110.             return _inventory.Count;
  111.         }  
  112.         public void ChangeActiveItem(int step)
  113.         {
  114.             SelectedIndexItem += step;
  115.             UpdateIndex();
  116.         }
  117.         protected void UpdateIndex()
  118.         {
  119.             if (SelectedIndexItem < 0)
  120.                 SelectedIndexItem = 0;
  121.             else if (SelectedIndexItem > _inventory.Count - 1)
  122.                 SelectedIndexItem = _inventory.Count - 1;
  123.         }
  124.         public Item Sell()
  125.         {
  126.             Item temp = _inventory[SelectedIndexItem];
  127.             _inventory.RemoveAt(SelectedIndexItem);
  128.             _money += temp.Cost;
  129.             UpdateIndex();
  130.             return temp;
  131.         }
  132.         public Item PickItem()
  133.         {
  134.             return _inventory[SelectedIndexItem];
  135.         }
  136.         public void GetInfo(Player player)
  137.         {
  138.             Messager.ShowMessageWithColor(Name, ConsoleColor.Cyan, false);
  139.             Messager.ShowMessageWithColor(GetInfoAboutAllItem(), ConsoleColor.White, false);
  140.             Messager.ShowMessageWithColor($"Выбранный индекс предмета {SelectedIndexItem}", ConsoleColor.Green,false);
  141.             Messager.ShowMessageWithColor($"\nВаши деньги: {player.Money}", ConsoleColor.Yellow, false);
  142.         }
  143.     }
  144.     class TradeRoom
  145.     {
  146.         private Player _player;
  147.         private Trader _trader;
  148.         public TradeRoom(Player player)
  149.         {
  150.             _player = player;
  151.             CreateNewTrader();
  152.         }
  153.         public void Work()
  154.         {
  155.             bool isOpen = true;
  156.             bool isTrading = false;
  157.             while (isOpen)
  158.             {
  159.                 if (isTrading)
  160.                 {
  161.                     Console.Clear();
  162.                     _trader.GetInfo(_player);
  163.                     Console.WriteLine($"\n\nСтрелка верх или вниз - выбор товара" +
  164.                         $"\n{ConsoleKey.Enter} - Покупка" +
  165.                         $"\n{ConsoleKey.Escape} - Выход из меню торговли");
  166.                     ConsoleKeyInfo key = Console.ReadKey();
  167.                     switch (key.Key)
  168.                     {
  169.                         case ConsoleKey.UpArrow:
  170.                             _trader.ChangeActiveItem(-1);
  171.                             break;
  172.                         case ConsoleKey.DownArrow:
  173.                             _trader.ChangeActiveItem(1);
  174.                             break;
  175.                         case ConsoleKey.Enter:
  176.                             Buy();
  177.                             break;
  178.                         case ConsoleKey.Escape:
  179.                             isTrading = false;
  180.                             break;
  181.                     }
  182.                 }
  183.                 else
  184.                 {
  185.                     Console.Clear();
  186.                     Console.WriteLine("Tab - создать нового торговца \nI - Посмотреть свой инвентарь \nEnter - Попросит торговца показать своей товар \nEsc закрыть");
  187.                     ConsoleKeyInfo key = Console.ReadKey();
  188.                     switch (key.Key)
  189.                     {
  190.                         case ConsoleKey.Tab:
  191.                             CreateNewTrader();
  192.                             break;
  193.                         case ConsoleKey.I:
  194.                             Console.Clear();
  195.                             _player.GetInfo();
  196.                             Console.ReadKey();
  197.                             break;
  198.                         case ConsoleKey.Enter:
  199.                             isTrading = true;
  200.                             break;
  201.                         case ConsoleKey.Escape:
  202.                             isOpen = false;
  203.                             break;
  204.                     }
  205.                 }
  206.             }
  207.         }
  208.         private void Buy()
  209.         {
  210.             if (_trader.GetSizeInventory() > 0)
  211.                 if (_player.ExploreAboutPossibleToBuy(_trader.PickItem()))
  212.                     _player.Buy(_trader.Sell());
  213.                 else
  214.                     Messager.ShowMessageWithColor("У вас больше нет денег.", ConsoleColor.Red, true);
  215.             else
  216.                 Messager.ShowMessageWithColor("У торговца больше нет вещей", ConsoleColor.Red, true);
  217.         }
  218.         private void CreateNewTrader()
  219.         {
  220.             _trader = new Trader();
  221.             Messager.ShowMessageWithColor("Торговец создан", ConsoleColor.White, true);
  222.         }
  223.     }
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement