Improve code style
This commit is contained in:
parent
21cf96ab5e
commit
b33d4b8553
@ -1,6 +1,4 @@
|
|||||||
using MafiaCommon;
|
namespace MafiaServer.Events
|
||||||
|
|
||||||
namespace MafiaServer.Events
|
|
||||||
{
|
{
|
||||||
public delegate void OnPlayerVoteEvent(PlayerSocketWorker sender, int id);
|
public delegate void OnPlayerVoteEvent(PlayerSocketWorker sender, int id);
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using MafiaCommon.Packets;
|
using MafiaCommon.Packets;
|
||||||
using MafiaCommon;
|
using MafiaCommon;
|
||||||
@ -8,21 +9,16 @@ namespace MafiaServer
|
|||||||
{
|
{
|
||||||
public class Game
|
public class Game
|
||||||
{
|
{
|
||||||
private List<PlayerSocketWorker> _players = new List<PlayerSocketWorker>();
|
private readonly List<PlayerSocketWorker> _players = new List<PlayerSocketWorker>();
|
||||||
private List<PlayerRole> _playerRolesAtStart = new List<PlayerRole>();
|
private readonly List<PlayerRole> _playerRolesAtStart = new List<PlayerRole>();
|
||||||
private bool isStarted = false;
|
private bool _isStarted;
|
||||||
private GameState _gameState = GameState.NotStarted;
|
private GameState _gameState = GameState.NotStarted;
|
||||||
private List<PlayerSocketWorker> _votesRemain = new List<PlayerSocketWorker>();
|
private readonly List<PlayerSocketWorker> _votesRemain = new List<PlayerSocketWorker>();
|
||||||
List<PlayerSocketWorker> _mafia = new List<PlayerSocketWorker>();
|
private readonly List<PlayerSocketWorker> _mafia = new List<PlayerSocketWorker>();
|
||||||
private Dictionary<int, int> _mafiaVotes = new Dictionary<int, int>();
|
private readonly Dictionary<int, int> _mafiaVotes = new Dictionary<int, int>();
|
||||||
private Dictionary<int, int> _dayVote = new Dictionary<int, int>();
|
private readonly Dictionary<int, int> _dayVote = new Dictionary<int, int>();
|
||||||
private Timer _voteStartTimer;
|
private Timer _voteStartTimer;
|
||||||
|
|
||||||
public Game()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ConnectPlayer(PlayerSocketWorker player)
|
public void ConnectPlayer(PlayerSocketWorker player)
|
||||||
{
|
{
|
||||||
if (_players.Count >= Settings.Config().MaxPlayers)
|
if (_players.Count >= Settings.Config().MaxPlayers)
|
||||||
@ -32,14 +28,14 @@ namespace MafiaServer
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (isStarted)
|
if (_isStarted)
|
||||||
{
|
{
|
||||||
player.sendPacket(new DisconnectPacket("Game already started!"));
|
player.sendPacket(new DisconnectPacket("Game already started!"));
|
||||||
player.disconnect();
|
player.disconnect();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
foreach (PlayerSocketWorker othPlayer in _players)
|
foreach (var othPlayer in _players)
|
||||||
{
|
{
|
||||||
othPlayer.sendPacket(new PlayerConnectedPacket(player.PlayerName, _players.Count + 1,
|
othPlayer.sendPacket(new PlayerConnectedPacket(player.PlayerName, _players.Count + 1,
|
||||||
Settings.Config().MaxPlayers));
|
Settings.Config().MaxPlayers));
|
||||||
@ -57,19 +53,9 @@ namespace MafiaServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Player> GetPlayersRoles()
|
private List<Player> GetPlayersRoles()
|
||||||
{
|
{
|
||||||
List<Player> players = new List<Player>();
|
return (from player in _players where player.Role != Role.Died select new Player(player.Id, player.PlayerName)).ToList();
|
||||||
|
|
||||||
foreach (PlayerSocketWorker player in _players)
|
|
||||||
{
|
|
||||||
if (player.Role != Role.Died)
|
|
||||||
{
|
|
||||||
players.Add(new Player(player.Id, player.PlayerName));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return players;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool WorkDeath(PlayerSocketWorker player)
|
private bool WorkDeath(PlayerSocketWorker player)
|
||||||
@ -80,12 +66,12 @@ namespace MafiaServer
|
|||||||
_mafia.Remove(player);
|
_mafia.Remove(player);
|
||||||
if (_mafia.Count == 0)
|
if (_mafia.Count == 0)
|
||||||
{
|
{
|
||||||
foreach (PlayerSocketWorker p in _players)
|
foreach (var p in _players)
|
||||||
{
|
{
|
||||||
p.sendPacket(new EndGamePacket(true,_playerRolesAtStart));
|
p.sendPacket(new EndGamePacket(true,_playerRolesAtStart));
|
||||||
}
|
}
|
||||||
|
|
||||||
isStarted = false;
|
_isStarted = false;
|
||||||
_gameState = GameState.NotStarted;
|
_gameState = GameState.NotStarted;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -101,34 +87,27 @@ namespace MafiaServer
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mafias = _mafia.Count + 1;
|
player.Role = Role.Died;
|
||||||
int aliveLefts = 0;
|
|
||||||
|
|
||||||
foreach (PlayerSocketWorker pl in _players)
|
var mafias = _mafia.Count + 1;
|
||||||
{
|
var aliveLefts = _players.Count(pl => pl.Role != Role.Died && pl.Role != Role.Don && pl.Role != Role.Mafia);
|
||||||
if (pl.Role != Role.Died && pl.Role != Role.Don && pl.Role != Role.Mafia) aliveLefts++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mafias >= aliveLefts)
|
if (mafias < aliveLefts) return true;
|
||||||
{
|
foreach (var p in _players)
|
||||||
foreach (PlayerSocketWorker p in _players)
|
|
||||||
{
|
{
|
||||||
p.sendPacket(new EndGamePacket(p.Role == Role.Mafia || p.Role == Role.Don, _playerRolesAtStart));
|
p.sendPacket(new EndGamePacket(p.Role == Role.Mafia || p.Role == Role.Don, _playerRolesAtStart));
|
||||||
}
|
}
|
||||||
isStarted = false;
|
_isStarted = false;
|
||||||
_gameState = GameState.NotStarted;
|
_gameState = GameState.NotStarted;
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
player.Role = Role.Died;
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PlayerOnOnPlayerVoteEvent(PlayerSocketWorker sender, int id)
|
private void PlayerOnOnPlayerVoteEvent(PlayerSocketWorker sender, int id)
|
||||||
{
|
{
|
||||||
if (_votesRemain.Contains(sender))
|
if (_votesRemain.Contains(sender))
|
||||||
{
|
{
|
||||||
PlayerSocketWorker voteFor = _players.FindPlayerById(id);
|
var voteFor = _players.FindPlayerById(id);
|
||||||
switch (_gameState)
|
switch (_gameState)
|
||||||
{
|
{
|
||||||
case GameState.VotingNight:
|
case GameState.VotingNight:
|
||||||
@ -137,24 +116,24 @@ namespace MafiaServer
|
|||||||
case Role.Don:
|
case Role.Don:
|
||||||
_mafiaVotes.AddEmpty(id, 2);
|
_mafiaVotes.AddEmpty(id, 2);
|
||||||
_votesRemain.Remove(sender);
|
_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 Role.Mafia:
|
case Role.Mafia:
|
||||||
_mafiaVotes.AddEmpty(id, 1);
|
_mafiaVotes.AddEmpty(id, 1);
|
||||||
_votesRemain.Remove(sender);
|
_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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,27 +145,24 @@ namespace MafiaServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_votesRemain.Count == 0)
|
if (_votesRemain.Count != 0) return;
|
||||||
{
|
|
||||||
switch (_gameState)
|
switch (_gameState)
|
||||||
{
|
{
|
||||||
case GameState.VotingNight:
|
case GameState.VotingNight:
|
||||||
int selId = 0;
|
var selId = 0;
|
||||||
int selVotes = 0;
|
var selVotes = 0;
|
||||||
foreach (KeyValuePair<int,int> votes in _mafiaVotes)
|
foreach (var (key, value) in _mafiaVotes.Where(votes => votes.Value > selVotes))
|
||||||
{
|
{
|
||||||
if (votes.Value > selVotes)
|
selId = key;
|
||||||
{
|
selVotes = value;
|
||||||
selId = votes.Key;
|
|
||||||
selVotes = votes.Value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerSocketWorker killed = _players.FindPlayerById(selId);
|
var killed = _players.FindPlayerById(selId);
|
||||||
if (WorkDeath(killed))
|
if (WorkDeath(killed))
|
||||||
{
|
{
|
||||||
_gameState = GameState.Day;
|
_gameState = GameState.Day;
|
||||||
foreach (PlayerSocketWorker player in _players)
|
foreach (var player in _players)
|
||||||
{
|
{
|
||||||
player.sendPacket(new GameStageChangedPacket(GameState.Day, player.Role,
|
player.sendPacket(new GameStageChangedPacket(GameState.Day, player.Role,
|
||||||
GetPlayersRoles()));
|
GetPlayersRoles()));
|
||||||
@ -196,16 +172,15 @@ namespace MafiaServer
|
|||||||
|
|
||||||
_voteStartTimer = new Timer(StartDayVote, null, 60000, 60000);
|
_voteStartTimer = new Timer(StartDayVote, null, 60000, 60000);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case GameState.VotingDay:
|
case GameState.VotingDay:
|
||||||
selId = 0;
|
selId = 0;
|
||||||
selVotes = 0;
|
selVotes = 0;
|
||||||
foreach (KeyValuePair<int, int> votes in _dayVote)
|
foreach (var (key, value) in _dayVote.Where(votes => votes.Value > selVotes))
|
||||||
{
|
{
|
||||||
if (votes.Value > selVotes)
|
selId = key;
|
||||||
{
|
selVotes = value;
|
||||||
selId = votes.Key; selVotes = votes.Value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
killed = _players.FindPlayerById(selId);
|
killed = _players.FindPlayerById(selId);
|
||||||
@ -213,7 +188,7 @@ namespace MafiaServer
|
|||||||
{
|
{
|
||||||
_gameState = GameState.VotingNight;
|
_gameState = GameState.VotingNight;
|
||||||
FillNightVotes();
|
FillNightVotes();
|
||||||
foreach (PlayerSocketWorker player in _players)
|
foreach (var player in _players)
|
||||||
{
|
{
|
||||||
player.sendPacket(new GameStageChangedPacket(GameState.VotingNight, player.Role,
|
player.sendPacket(new GameStageChangedPacket(GameState.VotingNight, player.Role,
|
||||||
GetPlayersRoles()));
|
GetPlayersRoles()));
|
||||||
@ -221,24 +196,21 @@ namespace MafiaServer
|
|||||||
killed.PlayerName + " был повешен!"));
|
killed.PlayerName + " был повешен!"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void StartDayVote(object obj)
|
private void StartDayVote(object obj)
|
||||||
{
|
{
|
||||||
_voteStartTimer.Dispose();
|
_voteStartTimer.Dispose();
|
||||||
_gameState = GameState.VotingDay;
|
_gameState = GameState.VotingDay;
|
||||||
_votesRemain.Clear();
|
_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 (var player in _players)
|
||||||
foreach (PlayerSocketWorker player in _players)
|
|
||||||
{
|
{
|
||||||
player.sendPacket(new GameStageChangedPacket(GameState.VotingDay,player.Role,GetPlayersRoles()));
|
player.sendPacket(new GameStageChangedPacket(GameState.VotingDay,player.Role,GetPlayersRoles()));
|
||||||
player.sendPacket(new MessageReceivePacket(ChatType.Day,true,"System","Начинаем голосование!"));
|
player.sendPacket(new MessageReceivePacket(ChatType.Day,true,"System","Начинаем голосование!"));
|
||||||
@ -247,7 +219,7 @@ namespace MafiaServer
|
|||||||
|
|
||||||
private void FillNightVotes()
|
private void FillNightVotes()
|
||||||
{
|
{
|
||||||
foreach (PlayerSocketWorker player in _players)
|
foreach (var player in _players)
|
||||||
{
|
{
|
||||||
switch (player.Role)
|
switch (player.Role)
|
||||||
{
|
{
|
||||||
@ -262,7 +234,7 @@ namespace MafiaServer
|
|||||||
private void PlayerOnOnDisconnectEvent(PlayerSocketWorker sender)
|
private void PlayerOnOnDisconnectEvent(PlayerSocketWorker sender)
|
||||||
{
|
{
|
||||||
_players.Remove(sender);
|
_players.Remove(sender);
|
||||||
foreach (PlayerSocketWorker player in _players)
|
foreach (var player in _players)
|
||||||
{
|
{
|
||||||
player.sendPacket(new PlayerDisconnectedPacket(true, sender.Id, _players.Count,
|
player.sendPacket(new PlayerDisconnectedPacket(true, sender.Id, _players.Count,
|
||||||
Settings.Config().MaxPlayers));
|
Settings.Config().MaxPlayers));
|
||||||
@ -275,7 +247,7 @@ namespace MafiaServer
|
|||||||
|
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
if (isStarted)
|
if (_isStarted)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -285,7 +257,7 @@ namespace MafiaServer
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (PlayerSocketWorker player in _players)
|
foreach (var player in _players)
|
||||||
{
|
{
|
||||||
player.Role = Role.Citizen;
|
player.Role = Role.Citizen;
|
||||||
}
|
}
|
||||||
@ -294,12 +266,12 @@ namespace MafiaServer
|
|||||||
_mafiaVotes.Clear();
|
_mafiaVotes.Clear();
|
||||||
_dayVote.Clear();
|
_dayVote.Clear();
|
||||||
|
|
||||||
Random random = new Random();
|
var random = new Random();
|
||||||
|
|
||||||
PlayerSocketWorker[] empty = _players.ToArray();
|
var empty = _players.ToArray();
|
||||||
random.Shuffle(empty);
|
random.Shuffle(empty);
|
||||||
|
|
||||||
int mafiasNeed = empty.Length / 3;
|
var mafiasNeed = empty.Length / 3;
|
||||||
|
|
||||||
Console.WriteLine("Debug: needs counted");
|
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;
|
don.Role = Role.Don;
|
||||||
_mafia.RemoveAt(0);
|
_mafia.RemoveAt(0);
|
||||||
|
|
||||||
List<Player> players = GetPlayersRoles();
|
var players = GetPlayersRoles();
|
||||||
|
|
||||||
don.sendPacket(new GameStartPacket(Role.Don,players));
|
don.sendPacket(new GameStartPacket(Role.Don,players));
|
||||||
_votesRemain.Add(don);
|
_votesRemain.Add(don);
|
||||||
|
|
||||||
foreach (PlayerSocketWorker player in empty)
|
foreach (var player in empty)
|
||||||
{
|
{
|
||||||
player.sendPacket(new GameStartPacket(Role.Citizen,players));
|
player.sendPacket(new GameStartPacket(Role.Citizen,players));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (PlayerSocketWorker player in _mafia)
|
foreach (var player in _mafia)
|
||||||
{
|
{
|
||||||
player.sendPacket(new GameStartPacket(Role.Mafia,players));
|
player.sendPacket(new GameStartPacket(Role.Mafia,players));
|
||||||
_votesRemain.Add(player);
|
_votesRemain.Add(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (PlayerSocketWorker player in _players)
|
foreach (var player in _players)
|
||||||
{
|
{
|
||||||
_playerRolesAtStart.Add(new PlayerRole(player.PlayerName,player.Role));
|
_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;
|
_gameState = GameState.VotingNight;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDisconnectByError(PlayerSocketWorker sender)
|
private void OnDisconnectByError(PlayerSocketWorker sender)
|
||||||
{
|
{
|
||||||
_players.Remove(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));
|
player.sendPacket(new PlayerDisconnectedPacket(true,sender.Id,_players.Count,Settings.Config().MaxPlayers));
|
||||||
}
|
}
|
||||||
@ -372,35 +344,32 @@ namespace MafiaServer
|
|||||||
switch (chatType)
|
switch (chatType)
|
||||||
{
|
{
|
||||||
case ChatType.Queue:
|
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));
|
player.sendPacket(new MessageReceivePacket(ChatType.Queue,false,sender.PlayerName,text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ChatType.Active:
|
case ChatType.Active:
|
||||||
if (isStarted)
|
if (_isStarted)
|
||||||
{
|
{
|
||||||
switch (sender.Role)
|
switch (sender.Role)
|
||||||
{
|
{
|
||||||
case Role.Mafia:
|
case Role.Mafia:
|
||||||
case Role.Don:
|
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,
|
player.sendPacket(new MessageReceivePacket(ChatType.Active, false, sender.PlayerName,
|
||||||
text));
|
text));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ChatType.Day:
|
case ChatType.Day:
|
||||||
if (isStarted)
|
if (_isStarted)
|
||||||
{
|
{
|
||||||
if (sender.Role == Role.Died)
|
if (sender.Role == Role.Died)
|
||||||
{
|
{
|
||||||
@ -408,7 +377,7 @@ namespace MafiaServer
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
foreach (PlayerSocketWorker player in _players)
|
foreach (var player in _players)
|
||||||
{
|
{
|
||||||
player.sendPacket(
|
player.sendPacket(
|
||||||
new MessageReceivePacket(ChatType.Day, false, sender.PlayerName, text));
|
new MessageReceivePacket(ChatType.Day, false, sender.PlayerName, text));
|
||||||
@ -416,6 +385,9 @@ namespace MafiaServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
Console.WriteLine("User sending in bad chat");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user