浏览代码

Add dict with players sorted by roles

Tigran 4 年之前
父节点
当前提交
0dd1e89e3b

+ 22 - 1
MafiaTelegramBot/Game/GameRooms/ExtendedGameRoom.cs

@@ -1,11 +1,32 @@
+using System.Collections.Generic;
 using System.Threading.Tasks;
+using MafiaTelegramBot.Resources;
 
 namespace MafiaTelegramBot.Game.GameRooms
 {
     public class ExtendedGameRoom : GameRoom
     {
         public override bool IsExtended { get; protected set; } = true;
-        
+
+        protected override Dictionary<Roles, List<Player>> PlayersRole { get; } = new()
+        {
+            [Roles.Mafia] = new List<Player>(),
+            [Roles.Don] = new List<Player>(),
+            [Roles.Villager] = new List<Player>(),
+            [Roles.Cop] = new List<Player>(),
+            [Roles.Doctor] = new List<Player>(),
+            [Roles.Dame] = new List<Player>(),
+            [Roles.Hooker] = new List<Player>(),
+            [Roles.Detective] = new List<Player>(),
+            [Roles.Elder] = new List<Player>(),
+            [Roles.Fool] = new List<Player>(),
+            [Roles.Journalist] = new List<Player>(),
+            [Roles.Werewolf] = new List<Player>(),
+            [Roles.Parasite] = new List<Player>(),
+            [Roles.Lawyer] = new List<Player>(),
+            [Roles.Necromancer] = new List<Player>()
+        };
+
         protected override Task ReadSettings()
         {
             throw new System.NotImplementedException();

+ 0 - 2
MafiaTelegramBot/Game/GameRooms/GameRoom.GameProcess.cs

@@ -1,4 +1,3 @@
-using System.Collections.Generic;
 using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
@@ -8,7 +7,6 @@ using MafiaTelegramBot.DataBase.EntityDao;
 using MafiaTelegramBot.Game.GameRoles;
 using MafiaTelegramBot.Models;
 using MafiaTelegramBot.Resources;
-using Org.BouncyCastle.Utilities;
 using Telegram.Bot.Types;
 using Timer = System.Timers.Timer;
 

+ 6 - 1
MafiaTelegramBot/Game/GameRooms/GameRoom.PrepareRoom.cs

@@ -33,12 +33,17 @@ namespace MafiaTelegramBot.Game.GameRooms
             {
                 var random = new Random();
                 var roles = new List<Roles>();
-                foreach (var (key, value) in Settings) roles.AddTimes(key, value);
+                foreach (var (key, value) in Settings)
+                {
+                    roles.AddTimes(key, value);
+                    Settings.Remove(key);
+                }
                 for (var i = 0; i < _turnOrder.Count; ++i)
                 {
                     var user = _turnOrder.Dequeue();
                     var value = random.Next(roles.Count);
                     var next = roles.GetAndRemove(value);
+                    PlayersRole[next].Add(user);
                     user.CurrentRole = Role.GetNewRoleInstance(next, this, user);
                     _turnOrder.Enqueue(user);
                 }

+ 3 - 9
MafiaTelegramBot/Game/GameRooms/GameRoom.Structure.cs

@@ -29,15 +29,9 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         public readonly Dictionary<long, Player> Players = new();
 
-        public readonly Dictionary<Roles, int> Settings = new()
-        {
-            {Roles.Mafia, 0},
-            {Roles.Cop, 0},
-            {Roles.Villager, 0},
-            {Roles.Doctor, 0},
-            {Roles.Don, 0},
-            {Roles.Hooker, 0},
-        };
+        public readonly Dictionary<Roles, int> Settings = new();
+
+        protected abstract Dictionary<Roles, List<Player>> PlayersRole { get; }
 
         public GameRoom()
         {

+ 20 - 14
MafiaTelegramBot/Game/GameRooms/NormalGameRoom.cs

@@ -1,3 +1,4 @@
+using System.Collections.Generic;
 using System.Threading.Tasks;
 using MafiaTelegramBot.Resources;
 
@@ -7,31 +8,36 @@ namespace MafiaTelegramBot.Game.GameRooms
     {
         public override bool IsExtended { get; protected set; } = false;
 
+        protected override Dictionary<Roles, List<Player>> PlayersRole { get; } = new()
+        {
+            [Roles.Mafia] = new List<Player>(),
+            [Roles.Don] = new List<Player>(),
+            [Roles.Villager] = new List<Player>(),
+            [Roles.Cop] = new List<Player>(),
+            [Roles.Doctor] = new List<Player>()
+        };
+
         protected override async Task ReadSettings()
         {
             await Task.Run(() =>
             {
-                Settings[Roles.Villager] = Players.Count;
-                Settings[Roles.Cop] = 1;
-                if (Players.Count != 8) Settings[Roles.Doctor] = 1;
-                else Settings[Roles.Doctor] = 0;
+                Settings.Add(Roles.Villager, Players.Count);
+                Settings.Add(Roles.Cop, 1);
+                if (Players.Count != 8) Settings.Add(Roles.Doctor, 1);
                 if (Players.Count % 3 == 0)
-                {
-                    Settings[Roles.Mafia] = Players.Count / 3;
-                    Settings[Roles.Don] = 0;
-                }
+                    Settings.Add(Roles.Mafia, Players.Count/3);
                 else
                 {
-                    Settings[Roles.Mafia] = (Players.Count / 3) - 1;
-                    Settings[Roles.Don] = 1;
+                    Settings.Add(Roles.Mafia, Players.Count/3 -1);
+                    Settings.Add(Roles.Don, 1);
                 }
-
                 foreach (var (key, value) in Settings)
+                {
                     if (key != Roles.Villager)
                         Settings[Roles.Villager] -= value;
-                foreach (var (key, value) in Settings)
-                    if (value < 1)
-                        Settings.Remove(key);
+                }
+                if (Settings[Roles.Mafia] < 1) Settings.Remove(Roles.Mafia);
+                if (Settings[Roles.Villager] < 1) Settings.Remove(Roles.Villager);
             });
         }
     }