View difference between Paste ID: d0bcZpbR and ap89HRGc
SHOW: | | - or go back to the newest paste.
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; } }
60+
        public int Сash { get { return Money; } }
61-
        protected int _money;
61+
        protected int Money;
62-
        protected List<Item> _inventory = new List<Item>();
62+
        protected List<Item> Inventory = new List<Item>();
63
        public Person(string name, int money)
64
        {
65-
            _money = money;
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());
70+
                Inventory.Add(new Item());
71
            }
72
        }
73
        public string GetInfoAboutAllItem()
74
        {
75
            string result = "";
76-
            for (int i = 0; i < _inventory.Count; i++)
76+
            for (int i = 0; i < Inventory.Count; i++)
77
            {
78-
                result += $"{i}:{_inventory[i].GetInfo()}\n";
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);
88+
            Inventory.Add(item);
89-
            _money -= item.Cost;
89+
            Money -= item.Cost;
90
            Messager.ShowMessageWithColor($"{item.Name} - Куплен", ConsoleColor.Green, true);
91
        }
92-
        public bool ExploreAboutPossibleToBuy(Item iten)
92+
        public bool СheckSolvency(Item iten)
93
        {
94
            if (Money >= iten.Cost) return true;
95
            else return false;
96
        }
97-
        public void GetInfo()
97+
        public void ShowInfo()
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;
110+
            return Inventory.Count;
111
        }  
112
        public void ChangeActiveItem(int step)
113
        {
114
            SelectedIndexItem += step;
115
            UpdateIndex();
116
        }
117-
        protected void UpdateIndex()
117+
118
        {
119
            Item temp = Inventory[SelectedIndexItem];
120
            Inventory.RemoveAt(SelectedIndexItem);
121-
            else if (SelectedIndexItem > _inventory.Count - 1)
121+
            Money += temp.Cost;
122-
                SelectedIndexItem = _inventory.Count - 1;
122+
123
            return temp;
124
        }
125
        public Item PickItem()
126-
            Item temp = _inventory[SelectedIndexItem];
126+
127-
            _inventory.RemoveAt(SelectedIndexItem);
127+
            return Inventory[SelectedIndexItem];
128-
            _money += temp.Cost;
128+
129
        public void ShowInfo()
130
        {
131
            Messager.ShowMessageWithColor(Name, ConsoleColor.Cyan, false);
132
            Messager.ShowMessageWithColor(GetInfoAboutAllItem(), ConsoleColor.White, false);
133
            Messager.ShowMessageWithColor($"Выбранный индекс предмета {SelectedIndexItem}", ConsoleColor.Green,false);
134-
            return _inventory[SelectedIndexItem];
134+
135
        private void UpdateIndex()
136-
        public void GetInfo(Player player)
136+
137
            if (SelectedIndexItem < 0)
138
                SelectedIndexItem = 0;
139
            else if (SelectedIndexItem > Inventory.Count - 1)
140
                SelectedIndexItem = Inventory.Count - 1;
141-
            Messager.ShowMessageWithColor($"\nВаши деньги: {player.Money}", ConsoleColor.Yellow, false);
141+
142
    }
143
    class TradeRoom 
144
    {
145
        private Player _player;
146
        private Trader _trader;
147
        public TradeRoom(Player player) 
148
        {
149
            _player = player;
150
            CreateNewTrader();
151
        }
152
        public void Work()
153
        {
154
            bool isOpen = true;
155
            bool isTrading = false;
156
            while (isOpen)
157
            {
158
                if (isTrading)
159
                {
160
                    Console.Clear();
161
                    _trader.ShowInfo();
162-
                    _trader.GetInfo(_player);
162+
163
                        $"\n{ConsoleKey.Enter} - Покупка" +
164
                        $"\n{ConsoleKey.Escape} - Выход из меню торговли");
165
                    ConsoleKeyInfo key = Console.ReadKey();
166
                    switch (key.Key)
167
                    {
168
                        case ConsoleKey.UpArrow:
169
                            _trader.ChangeActiveItem(-1);
170
                            break;
171
                        case ConsoleKey.DownArrow:
172
                            _trader.ChangeActiveItem(1);
173
                            break;
174
                        case ConsoleKey.Enter:
175
                            Buy();
176
                            break;
177
                        case ConsoleKey.Escape:
178
                            isTrading = false;
179
                            break;
180
                    }
181
                }
182
                else
183
                {
184
                    Console.Clear();
185
                    Console.WriteLine("Tab - создать нового торговца \nI - Посмотреть свой инвентарь \nEnter - Попросит торговца показать своей товар \nEsc закрыть"); 
186
                    ConsoleKeyInfo key = Console.ReadKey();
187
                    switch (key.Key)
188
                    {
189
                        case ConsoleKey.Tab:
190
                            CreateNewTrader();
191
                            break;
192
                        case ConsoleKey.I:
193
                            Console.Clear();
194
                            _player.ShowInfo();
195-
                            _player.GetInfo();
195+
196
                            break;
197
                        case ConsoleKey.Enter:
198
                            isTrading = true;
199
                            break;
200
                        case ConsoleKey.Escape:
201
                            isOpen = false;
202
                            break;
203
                    }
204
                }
205
            }
206
        }
207
        private void Buy()
208
        {
209
            if (_trader.GetSizeInventory() > 0)
210
                if (_player.СheckSolvency(_trader.PickItem()))
211-
                if (_player.ExploreAboutPossibleToBuy(_trader.PickItem()))
211+
212
                else
213
                    Messager.ShowMessageWithColor("У ваc больше нет денег.", ConsoleColor.Red, true);
214-
                    Messager.ShowMessageWithColor("У вас больше нет денег.", ConsoleColor.Red, true);
214+
215
                Messager.ShowMessageWithColor("У торговца больше нет вещей", ConsoleColor.Red, true);
216
        }
217
        private void CreateNewTrader()
218
        {
219
            _trader = new Trader();
220
            Messager.ShowMessageWithColor("Торговец создан", ConsoleColor.White, true);
221
        }
222
    }
223
}