Advertisement
MaoChessy

Task 31

Nov 9th, 2020
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2.  
  3. namespace C_sharp_Light
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             Console.CursorVisible = false;
  10.             Console.Write("Введите имя игрока: ");
  11.             Person player = new Person(Console.ReadLine());
  12.             TradeRoom tradeRoom = new TradeRoom(player);
  13.             tradeRoom.Work();
  14.         }
  15.     }
  16.  
  17.     static class RandomStatic
  18.     {
  19.         static private Random _rand = new Random();
  20.  
  21.         static public int GetNext(int min, int max)
  22.         {
  23.             return _rand.Next(min,max);
  24.  
  25.         }
  26.         static public int GetNext(int max)
  27.         {
  28.             return _rand.Next(max);
  29.         }
  30.     }
  31.  
  32.     static class DisplayingMessages
  33.     {
  34.         static public void ShowMessageWithColor(string message, ConsoleColor color, int CursorleftPosition)
  35.         {
  36.             Console.CursorLeft = CursorleftPosition;
  37.             ConsoleColor defaultColor = Console.ForegroundColor;
  38.             Console.ForegroundColor = color;
  39.             Console.WriteLine(message);
  40.             Console.ForegroundColor = defaultColor;
  41.         }
  42.  
  43.         static public void ShowMessageWithColor(string message, ConsoleColor color, bool delay)
  44.         {
  45.             ConsoleColor defaultColor = Console.ForegroundColor;
  46.             Console.ForegroundColor = color;
  47.             Console.WriteLine(message);
  48.             Console.ForegroundColor = defaultColor;
  49.             if(delay)
  50.                 Console.ReadKey();
  51.         }
  52.     }
  53. }
  54.  
  55. namespace C_sharp_Light
  56. {
  57.     class Item
  58.     {
  59.         private string _name;
  60.         private int _cost;
  61.         public int Cost
  62.         {
  63.             get
  64.             {
  65.                 return _cost;
  66.             }
  67.         }
  68.         public string Name
  69.         {
  70.             get
  71.             {
  72.                 return _name;
  73.             }
  74.         }
  75.         public Item()
  76.         {
  77.             _name = new string[] { "Железный меч", "Рогатый шлем", "Посох огня", "Кожаный сапоги", "Сладкий рулет" }[RandomStatic.GetNext(0, 5)];
  78.             _cost = RandomStatic.GetNext(20, 150);
  79.         }
  80.         private Item(string name, int baseCost)
  81.         {
  82.             _name = name;
  83.             _cost = baseCost;
  84.         }
  85.         public Item Clone()
  86.         {
  87.             return new Item(Name, Cost);
  88.         }
  89.         public string Info()
  90.         {
  91.             return $"{Name} стоит - {Cost}";
  92.         }
  93.     }
  94.     class Person
  95.     {
  96.         private int _money;
  97.         public string Name { get; private set; }
  98.         public int Money
  99.         {
  100.             get
  101.             {
  102.                 return _money;
  103.             }
  104.         }
  105.         private List<Item> _inventory = new List<Item>();
  106.         public int SelectedIndexItem { get; private set; }
  107.         public Person()
  108.         {
  109.             _money = RandomStatic.GetNext(300, 900);
  110.             SelectedIndexItem = 0;
  111.             Name = "Торговец";
  112.             int amountItems = RandomStatic.GetNext(3, 9);
  113.             for (int i = 0; i < amountItems; i++)
  114.             {
  115.                 _inventory.Add(new Item());
  116.             }
  117.         }
  118.         public Person(string name)
  119.         {
  120.             _money = RandomStatic.GetNext(300, 900);
  121.             SelectedIndexItem = 0;
  122.             Name = name;
  123.             int amountItems = RandomStatic.GetNext(3, 9);
  124.             for (int i = 0; i < amountItems; i++)
  125.             {
  126.                 _inventory.Add(new Item());
  127.             }
  128.         }
  129.         //
  130.         public bool CanBuyIt(Item iten)
  131.         {
  132.             if (Money >= iten.Cost) return true;
  133.             else return false;
  134.         }
  135.         public int GetSizeInventory()
  136.         {
  137.             return _inventory.Count;
  138.         }
  139.         public string GetInfoItemByIndex(int index)
  140.         {
  141.             return _inventory[index].Info();
  142.         }
  143.         public void ChangeActiveItem(int step)
  144.         {
  145.             SelectedIndexItem += step;
  146.             UpdateIndex();
  147.         }
  148.         public Item GiveItem()
  149.         {
  150.             Item temp = _inventory[SelectedIndexItem];
  151.             _inventory.RemoveAt(SelectedIndexItem);
  152.             _money += temp.Cost;
  153.             UpdateIndex();
  154.             return temp.Clone();
  155.         }
  156.         public Item PickItem()
  157.         {
  158.             return _inventory[SelectedIndexItem];
  159.         }
  160.         public void GetItem(Item item)
  161.         {
  162.             _inventory.Add(item);
  163.             _money -= item.Cost;
  164.             UpdateIndex();
  165.         }
  166.         public void DrawnInfo(bool isSelected, int CursorPositionX)
  167.         {
  168.             if (isSelected)
  169.                 DisplayingMessages.ShowMessageWithColor($"Инветарь {Name} - выбран", ConsoleColor.Green, CursorPositionX);
  170.             else
  171.                 DisplayingMessages.ShowMessageWithColor($"Инветарь {Name} - не выбран", ConsoleColor.Red, CursorPositionX);
  172.             DisplayingMessages.ShowMessageWithColor($"Денег: {Money}", ConsoleColor.Yellow, CursorPositionX);
  173.             for (int i = 0; i < GetSizeInventory(); i++)
  174.             {
  175.                 if (i == SelectedIndexItem && isSelected)
  176.                     DisplayingMessages.ShowMessageWithColor($"{i}: {GetInfoItemByIndex(i)}", ConsoleColor.Green, CursorPositionX);
  177.                 else
  178.                     DisplayingMessages.ShowMessageWithColor($"{i}: {GetInfoItemByIndex(i)}", ConsoleColor.White, CursorPositionX);
  179.             }
  180.         }
  181.         private void UpdateIndex()
  182.         {
  183.             if (SelectedIndexItem < 0)
  184.                 SelectedIndexItem = 0;
  185.             else if (SelectedIndexItem > _inventory.Count - 1)
  186.                 SelectedIndexItem = _inventory.Count - 1;
  187.         }
  188.     }
  189.     class TradeRoom
  190.     {
  191.         private Person _player;
  192.         private Person _trader;
  193.         bool playerIsSelected = true;
  194.         public TradeRoom(Person player)
  195.         {
  196.             _player = player;
  197.             CreateNewTrader();
  198.         }
  199.         public void Work()
  200.         {
  201.             bool isOpen = true;
  202.             int xPosMenu = 0, yPosMeny = 22;
  203.             while (isOpen)
  204.             {
  205.                 Console.Clear();
  206.                 DrawnInfoAboutTraders();
  207.                 Console.SetCursorPosition(xPosMenu, yPosMeny);
  208.                 Console.WriteLine($"{ConsoleKey.RightArrow} или {ConsoleKey.LeftArrow} - для смены активного лица " +
  209.                     $"\n{ConsoleKey.UpArrow} и {ConsoleKey.DownArrow} - для выбора предмета" +
  210.                     $"\n{ConsoleKey.Enter} - Покупка/продажа" +
  211.                     $"\n{ConsoleKey.Tab} - Получить нового торговца" +
  212.                     $"\n{ConsoleKey.Escape} - Выход");
  213.                 ConsoleKeyInfo key = Console.ReadKey();
  214.                 switch (key.Key)
  215.                 {
  216.                     case ConsoleKey.RightArrow: case ConsoleKey.LeftArrow:
  217.                         ChangeSellingSide();
  218.                         break;
  219.                     case ConsoleKey.UpArrow:
  220.                         ChangeActiveItem(-1);
  221.                         break;
  222.                     case ConsoleKey.DownArrow:
  223.                         ChangeActiveItem(1);
  224.                         break;
  225.                     case ConsoleKey.Tab:
  226.                         CreateNewTrader();
  227.                         break;
  228.                     case ConsoleKey.Enter:
  229.                         BuyOrSell();
  230.                         break;
  231.                     case ConsoleKey.Escape:
  232.                         isOpen = false;
  233.                         break;
  234.                 }
  235.             }
  236.         }
  237.         private void BuyOrSell()
  238.         {
  239.             if (ActiveTrader().GetSizeInventory() > 0)
  240.                 if (UnactiveTrader().CanBuyIt(ActiveTrader().PickItem()))
  241.                     UnactiveTrader().GetItem(ActiveTrader().GiveItem());
  242.                 else
  243.                     DisplayingMessages.ShowMessageWithColor("ОШИБКА: У неактивного участника недостаточно денег для покупки предмета у активного", ConsoleColor.Red, true);
  244.             else
  245.                 DisplayingMessages.ShowMessageWithColor("ОШИБКА: У активного участника больше не осталось вещей.", ConsoleColor.Red, true);
  246.         }
  247.         private void DrawnInfoAboutTraders()
  248.         {
  249.             int xPosPlayer = 0;
  250.             int xPosTrader = xPosPlayer + 30;
  251.             _player.DrawnInfo(playerIsSelected, xPosPlayer);
  252.             Console.CursorTop = 0;
  253.             _trader.DrawnInfo(!playerIsSelected, xPosTrader);
  254.         }
  255.         private void ChangeSellingSide()
  256.         {
  257.             playerIsSelected = !playerIsSelected;
  258.         }
  259.         private void CreateNewTrader()
  260.         {
  261.             _trader = new Person();
  262.         }
  263.         private void ChangeActiveItem(int step)
  264.         {
  265.             ActiveTrader().ChangeActiveItem(step);
  266.         }
  267.         private Person ActiveTrader()
  268.         {
  269.             if (playerIsSelected)
  270.                 return _player;
  271.             else
  272.                 return _trader;
  273.         }
  274.         private Person UnactiveTrader()
  275.         {
  276.             if (playerIsSelected)
  277.                 return _trader;
  278.             else
  279.                 return _player;
  280.         }
  281.     }
  282. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement