View difference between Paste ID: DBu1cZyb and C26sWULh
SHOW: | | - or go back to the newest paste.
1
using System;
2
3
namespace C_sharp_Light
4
{
5
    class Program
6
    {
7
        static void Main(string[] args)
8
        {
9-
            
9+
            PlayerDataBase playerData = new PlayerDataBase();
10
            playerData.Work();
11
        }
12
    }
13
14
class Player
15
    {
16
        public string Name { get; private set;  }
17
        public int Lvl { get; private set; }
18
        public bool IsBan { get; private set;  }
19
        public int ID { get; private set; }
20
21
        public Player(string name, int id)
22
        {
23
            Name = name;
24
            ID = id;
25
            IsBan = false;
26
            Lvl = 0;
27
        }
28
        public void Ban()
29
        {
30
            IsBan = true;
31
        }
32
        public void Unban()
33
        {
34
            IsBan = false;
35
        }
36
    }
37
    class PlayerDataBase
38
    {
39
        private List<Player> _players = new List<Player>();
40
41
        public void Work()
42
        {
43
            bool isOpen = true;
44
            while (isOpen)
45
            {
46
                Console.WriteLine("1 - Вывести базу данных \n2 - Добавить игрока \n3 - Удалить игрока \n4 - Забанить игрока \n5 - Разбанить игрока \n0- Выход");
47
                ConsoleKeyInfo key = Console.ReadKey();
48
                Console.Clear();
49
                switch (key.Key)
50
                {
51
                    case ConsoleKey.D1:
52
                        WriteAllDataBase();
53
                        break;
54
                    case ConsoleKey.D2:
55
                        Console.Write("Введите имя игрока: ");
56
                        AddPlayer(Console.ReadLine());
57
                        break;
58
                    case ConsoleKey.D3:
59
                        Console.Write("Введите id игрока: ");
60
                        DeletePlayer(Convert.ToInt32(Console.ReadLine()));
61
                        break;
62
                    case ConsoleKey.D4:
63
                        Console.Write("Введите id игрока: ");
64
                        BanPlayer(Convert.ToInt32(Console.ReadLine()));
65
                        break;
66
                    case ConsoleKey.D5:
67
                        Console.Write("Введите id игрока: ");
68
                        UnbanPlayer(Convert.ToInt32(Console.ReadLine()));
69
                        break;
70
                    case ConsoleKey.D0:
71
                        isOpen = false;
72
                        break;
73
                }
74
                if (isOpen)
75
                    Console.ReadKey();
76
                Console.Clear();
77
            }
78
        }
79
        //
80
        private void WriteAllDataBase()
81
        {
82
            int counter = 0;
83
            int idPositionX = 5;
84
            int namePositionX = idPositionX + 7;
85
            int lvlPositionX = namePositionX + 12;
86
            int banPositionX = lvlPositionX + 7;
87
            foreach (Player player in _players)
88
            {
89
                Console.ForegroundColor = ConsoleColor.DarkBlue;
90
                Console.Write($"{counter}:");
91
92
                Console.ForegroundColor = ConsoleColor.White;
93
                Console.CursorLeft = idPositionX;
94
                Console.Write($"id:{player.ID}");
95
                Console.CursorLeft = namePositionX;
96
                Console.Write($"{player.Name}");
97
                Console.CursorLeft = lvlPositionX;
98
                Console.Write($"Lvl:{player.Lvl}");
99
                
100
                if(player.IsBan)
101
                    Console.ForegroundColor = ConsoleColor.Red;
102
                else
103
                    Console.ForegroundColor = ConsoleColor.Green;
104
                Console.CursorLeft = banPositionX;
105
		Console.Write($"ban: {player.IsBan.ToString()}. \n");
106
107
                Console.ForegroundColor = ConsoleColor.White;
108
                counter++;
109
            }
110
        }
111
        private void AddPlayer(string name)
112
        {
113
            _players.Add(new Player(name, GetFreeId()));
114
            SortDataBaseByID();
115
        }
116
        private void DeletePlayer(int id)
117
        {
118
            int index = FindIndexPlayerByIdPlayer(id);
119
            if (index >= 0)
120
                _players.RemoveAt(index);
121
            else
122
                DebugError("Такого ID не существует!");
123
        }
124
        private void BanPlayer(int id)
125
        {
126
            int index = FindIndexPlayerByIdPlayer(id);
127
            if (index >= 0)
128
                _players[index].Ban();
129
            else
130
                DebugError("Такого ID не существует!");
131
        }
132
        private void UnbanPlayer(int id)
133
        {
134
            int index = FindIndexPlayerByIdPlayer(id);
135
            if (index >= 0)
136
                _players[index].Unban();
137
            else
138
                DebugError("Такого ID не существует!");
139
        }
140
        //
141
        private void DebugError(string massage)
142
        {
143
            ConsoleColor colorConsoleBefore = Console.ForegroundColor;
144
            Console.ForegroundColor = ConsoleColor.Red;
145
            Console.WriteLine($"\n Ошибка: {massage}");
146
            Console.ForegroundColor = colorConsoleBefore;
147
        }
148
        private int FindIndexPlayerByIdPlayer(int id)
149
        {
150
            for (int i = 0; i < _players.Count; i++)
151
            {
152
                if (_players[i].ID == id)
153
                    return i;
154
            }
155
            return -1;
156
        }
157
        private int GetFreeId()
158
        {
159
            SortDataBaseByID();
160
            if (_players.Count == 0)
161
                return 0;
162
            if(_players[0].ID != 0)
163
                return 0;
164
            for (int i = 0; i < _players.Count-1; i++)
165
            {
166
                if (_players[i].ID + 1 != _players[i + 1].ID)
167
                    return _players[i].ID + 1;
168
            }
169
            return _players[_players.Count - 1].ID + 1;
170
        }
171
        private void SortDataBaseByID()
172
        {
173
            _players.Sort(delegate (Player x, Player y)
174
            {
175
                    if (x.ID > y.ID) return 1;
176
                    else if (x.ID<y.ID) return -1;
177
                    return 0;
178
            });
179
        }
180
    }
181
182
}