diff --git a/MafiaServer/Events/OnPlayerVoteEvent.cs b/MafiaServer/Events/OnPlayerVoteEvent.cs index 354d090..7311ece 100644 --- a/MafiaServer/Events/OnPlayerVoteEvent.cs +++ b/MafiaServer/Events/OnPlayerVoteEvent.cs @@ -1,6 +1,4 @@ -using MafiaCommon; - -namespace MafiaServer.Events +namespace MafiaServer.Events { public delegate void OnPlayerVoteEvent(PlayerSocketWorker sender, int id); } \ No newline at end of file diff --git a/MafiaServer/Game.cs b/MafiaServer/Game.cs index 1783912..425d4df 100644 --- a/MafiaServer/Game.cs +++ b/MafiaServer/Game.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Threading; using MafiaCommon.Packets; using MafiaCommon; @@ -8,21 +9,16 @@ namespace MafiaServer { public class Game { - private List _players = new List(); - private List _playerRolesAtStart = new List(); - private bool isStarted = false; + private readonly List _players = new List(); + private readonly List _playerRolesAtStart = new List(); + private bool _isStarted; private GameState _gameState = GameState.NotStarted; - private List _votesRemain = new List(); - List _mafia = new List(); - private Dictionary _mafiaVotes = new Dictionary(); - private Dictionary _dayVote = new Dictionary(); + private readonly List _votesRemain = new List(); + private readonly List _mafia = new List(); + private readonly Dictionary _mafiaVotes = new Dictionary(); + private readonly Dictionary _dayVote = new Dictionary(); private Timer _voteStartTimer; - public Game() - { - - } - public void ConnectPlayer(PlayerSocketWorker player) { if (_players.Count >= Settings.Config().MaxPlayers) @@ -32,14 +28,14 @@ namespace MafiaServer } else { - if (isStarted) + if (_isStarted) { player.sendPacket(new DisconnectPacket("Game already started!")); player.disconnect(); } else { - foreach (PlayerSocketWorker othPlayer in _players) + foreach (var othPlayer in _players) { othPlayer.sendPacket(new PlayerConnectedPacket(player.PlayerName, _players.Count + 1, Settings.Config().MaxPlayers)); @@ -57,19 +53,9 @@ namespace MafiaServer } } - public List GetPlayersRoles() + private List GetPlayersRoles() { - List players = new List(); - - foreach (PlayerSocketWorker player in _players) - { - if (player.Role != Role.Died) - { - players.Add(new Player(player.Id, player.PlayerName)); - } - } - - return players; + return (from player in _players where player.Role != Role.Died select new Player(player.Id, player.PlayerName)).ToList(); } private bool WorkDeath(PlayerSocketWorker player) @@ -80,12 +66,12 @@ namespace MafiaServer _mafia.Remove(player); if (_mafia.Count == 0) { - foreach (PlayerSocketWorker p in _players) + foreach (var p in _players) { p.sendPacket(new EndGamePacket(true,_playerRolesAtStart)); } - isStarted = false; + _isStarted = false; _gameState = GameState.NotStarted; return false; } @@ -100,129 +86,118 @@ namespace MafiaServer } break; } - - int mafias = _mafia.Count + 1; - int aliveLefts = 0; - foreach (PlayerSocketWorker pl in _players) - { - if (pl.Role != Role.Died && pl.Role != Role.Don && pl.Role != Role.Mafia) aliveLefts++; - } - - if (mafias >= aliveLefts) - { - foreach (PlayerSocketWorker p in _players) - { - p.sendPacket(new EndGamePacket(p.Role == Role.Mafia || p.Role == Role.Don, _playerRolesAtStart)); - } - isStarted = false; - _gameState = GameState.NotStarted; - return false; - } - player.Role = Role.Died; - return true; + + var mafias = _mafia.Count + 1; + var aliveLefts = _players.Count(pl => pl.Role != Role.Died && pl.Role != Role.Don && pl.Role != Role.Mafia); + + if (mafias < aliveLefts) return true; + foreach (var p in _players) + { + p.sendPacket(new EndGamePacket(p.Role == Role.Mafia || p.Role == Role.Don, _playerRolesAtStart)); + } + _isStarted = false; + _gameState = GameState.NotStarted; + return false; + } private void PlayerOnOnPlayerVoteEvent(PlayerSocketWorker sender, int id) { if (_votesRemain.Contains(sender)) { - PlayerSocketWorker voteFor = _players.FindPlayerById(id); + var voteFor = _players.FindPlayerById(id); switch (_gameState) { case GameState.VotingNight: switch (sender.Role) { case Role.Don: - _mafiaVotes.AddEmpty(id,2); + _mafiaVotes.AddEmpty(id, 2); _votesRemain.Remove(sender); - foreach (PlayerSocketWorker player in _players) + foreach (var player in _players.Where(player => + player.Role == Role.Mafia || player.Role == Role.Don)) { - if (player.Role == Role.Mafia || player.Role == Role.Don) - { - player.sendPacket(new MessageReceivePacket(ChatType.Active,true,"System",sender.PlayerName+" проголосовал за "+voteFor.PlayerName)); - } + player.sendPacket(new MessageReceivePacket(ChatType.Active, true, "System", + sender.PlayerName + " проголосовал за " + voteFor.PlayerName)); } + break; case Role.Mafia: - _mafiaVotes.AddEmpty(id,1); + _mafiaVotes.AddEmpty(id, 1); _votesRemain.Remove(sender); - foreach (PlayerSocketWorker player in _players) + foreach (var player in _players.Where(player => + player.Role == Role.Mafia || player.Role == Role.Don)) { - if (player.Role == Role.Mafia || player.Role == Role.Don) - { - player.sendPacket(new MessageReceivePacket(ChatType.Active,true,"System",sender.PlayerName+" проголосовал за "+voteFor.PlayerName)); - } + player.sendPacket(new MessageReceivePacket(ChatType.Active, true, "System", + sender.PlayerName + " проголосовал за " + voteFor.PlayerName)); } + break; } break; case GameState.VotingDay: - _dayVote.AddEmpty(id,1); + _dayVote.AddEmpty(id, 1); _votesRemain.Remove(sender); break; } } - if (_votesRemain.Count == 0) + if (_votesRemain.Count != 0) return; + + switch (_gameState) { - switch (_gameState) - { - case GameState.VotingNight: - int selId = 0; - int selVotes = 0; - foreach (KeyValuePair votes in _mafiaVotes) + case GameState.VotingNight: + var selId = 0; + var selVotes = 0; + foreach (var (key, value) in _mafiaVotes.Where(votes => votes.Value > selVotes)) + { + selId = key; + selVotes = value; + } + + var killed = _players.FindPlayerById(selId); + if (WorkDeath(killed)) + { + _gameState = GameState.Day; + foreach (var player in _players) { - if (votes.Value > selVotes) - { - selId = votes.Key; - selVotes = votes.Value; - } + player.sendPacket(new GameStageChangedPacket(GameState.Day, player.Role, + GetPlayersRoles())); + player.sendPacket(new MessageReceivePacket(ChatType.Day, true, "System", + killed.PlayerName + " был убит!")); } - PlayerSocketWorker killed = _players.FindPlayerById(selId); - if (WorkDeath(killed)) - { - _gameState = GameState.Day; - foreach (PlayerSocketWorker player in _players) - { - player.sendPacket(new GameStageChangedPacket(GameState.Day, player.Role, - GetPlayersRoles())); - player.sendPacket(new MessageReceivePacket(ChatType.Day, true, "System", - killed.PlayerName + " был убит!")); - } + _voteStartTimer = new Timer(StartDayVote, null, 60000, 60000); + } - _voteStartTimer = new Timer(StartDayVote, null, 60000, 60000); - } - break; - case GameState.VotingDay: - selId = 0; - selVotes = 0; - foreach (KeyValuePair votes in _dayVote) - { - if (votes.Value > selVotes) - { - selId = votes.Key; selVotes = votes.Value; - } - } + break; + case GameState.VotingDay: + selId = 0; + selVotes = 0; + foreach (var (key, value) in _dayVote.Where(votes => votes.Value > selVotes)) + { + selId = key; + selVotes = value; + } - killed = _players.FindPlayerById(selId); - if (WorkDeath(killed)) + killed = _players.FindPlayerById(selId); + if (WorkDeath(killed)) + { + _gameState = GameState.VotingNight; + FillNightVotes(); + foreach (var player in _players) { - _gameState = GameState.VotingNight; - FillNightVotes(); - foreach (PlayerSocketWorker player in _players) - { - player.sendPacket(new GameStageChangedPacket(GameState.VotingNight, player.Role, - GetPlayersRoles())); - player.sendPacket(new MessageReceivePacket(ChatType.Day, true, "System", - killed.PlayerName + " был повешен!")); - } + player.sendPacket(new GameStageChangedPacket(GameState.VotingNight, player.Role, + GetPlayersRoles())); + player.sendPacket(new MessageReceivePacket(ChatType.Day, true, "System", + killed.PlayerName + " был повешен!")); } - break; - } + } + + break; } } @@ -231,14 +206,11 @@ namespace MafiaServer _voteStartTimer.Dispose(); _gameState = GameState.VotingDay; _votesRemain.Clear(); - foreach (PlayerSocketWorker player in _players) + foreach (var player in _players.Where(player => player.Role != Role.Died)) { - if (player.Role != Role.Died) - { - _votesRemain.Add(player); - } + _votesRemain.Add(player); } - foreach (PlayerSocketWorker player in _players) + foreach (var player in _players) { player.sendPacket(new GameStageChangedPacket(GameState.VotingDay,player.Role,GetPlayersRoles())); player.sendPacket(new MessageReceivePacket(ChatType.Day,true,"System","Начинаем голосование!")); @@ -247,7 +219,7 @@ namespace MafiaServer private void FillNightVotes() { - foreach (PlayerSocketWorker player in _players) + foreach (var player in _players) { switch (player.Role) { @@ -262,7 +234,7 @@ namespace MafiaServer private void PlayerOnOnDisconnectEvent(PlayerSocketWorker sender) { _players.Remove(sender); - foreach (PlayerSocketWorker player in _players) + foreach (var player in _players) { player.sendPacket(new PlayerDisconnectedPacket(true, sender.Id, _players.Count, Settings.Config().MaxPlayers)); @@ -275,7 +247,7 @@ namespace MafiaServer public void Start() { - if (isStarted) + if (_isStarted) { return; } @@ -285,7 +257,7 @@ namespace MafiaServer return; } - foreach (PlayerSocketWorker player in _players) + foreach (var player in _players) { player.Role = Role.Citizen; } @@ -294,12 +266,12 @@ namespace MafiaServer _mafiaVotes.Clear(); _dayVote.Clear(); - Random random = new Random(); + var random = new Random(); - PlayerSocketWorker[] empty = _players.ToArray(); + var empty = _players.ToArray(); random.Shuffle(empty); - int mafiasNeed = empty.Length / 3; + var mafiasNeed = empty.Length / 3; Console.WriteLine("Debug: needs counted"); @@ -324,43 +296,43 @@ namespace MafiaServer } } - Console.WriteLine("Debug: randomazed"); + Console.WriteLine("Debug: randomized"); - PlayerSocketWorker don = _mafia[0]; + var don = _mafia[0]; don.Role = Role.Don; _mafia.RemoveAt(0); - List players = GetPlayersRoles(); + var players = GetPlayersRoles(); don.sendPacket(new GameStartPacket(Role.Don,players)); _votesRemain.Add(don); - foreach (PlayerSocketWorker player in empty) + foreach (var player in empty) { player.sendPacket(new GameStartPacket(Role.Citizen,players)); } - foreach (PlayerSocketWorker player in _mafia) + foreach (var player in _mafia) { player.sendPacket(new GameStartPacket(Role.Mafia,players)); _votesRemain.Add(player); } - foreach (PlayerSocketWorker player in _players) + foreach (var player in _players) { _playerRolesAtStart.Add(new PlayerRole(player.PlayerName,player.Role)); } - Console.WriteLine("Debug: packets sended"); + Console.WriteLine("Debug: packets sent"); - isStarted = true; + _isStarted = true; _gameState = GameState.VotingNight; } private void OnDisconnectByError(PlayerSocketWorker sender) { _players.Remove(sender); - foreach (PlayerSocketWorker player in _players) + foreach (var player in _players) { player.sendPacket(new PlayerDisconnectedPacket(true,sender.Id,_players.Count,Settings.Config().MaxPlayers)); } @@ -372,35 +344,32 @@ namespace MafiaServer switch (chatType) { case ChatType.Queue: - if (!isStarted) + if (!_isStarted) { - foreach (PlayerSocketWorker player in _players) + foreach (var player in _players) { player.sendPacket(new MessageReceivePacket(ChatType.Queue,false,sender.PlayerName,text)); } } break; case ChatType.Active: - if (isStarted) + if (_isStarted) { switch (sender.Role) { case Role.Mafia: case Role.Don: - foreach (PlayerSocketWorker player in _players) + foreach (var player in _players.Where(player => player.Role == Role.Mafia || player.Role == Role.Don)) { - if (player.Role == Role.Mafia || player.Role == Role.Don) - { - player.sendPacket(new MessageReceivePacket(ChatType.Active, false, sender.PlayerName, - text)); - } + player.sendPacket(new MessageReceivePacket(ChatType.Active, false, sender.PlayerName, + text)); } break; } } break; case ChatType.Day: - if (isStarted) + if (_isStarted) { if (sender.Role == Role.Died) { @@ -408,7 +377,7 @@ namespace MafiaServer } else { - foreach (PlayerSocketWorker player in _players) + foreach (var player in _players) { player.sendPacket( new MessageReceivePacket(ChatType.Day, false, sender.PlayerName, text)); @@ -416,6 +385,9 @@ namespace MafiaServer } } break; + default: + Console.WriteLine("User sending in bad chat"); + break; } } }