public override void OnPlayerLoggedOut(Player player) { dynamic clients = _connectionManagerFactory().GetClients<GamesRoom>(); var groupManager = (IGroupManager)clients; groupManager.RemoveFromGroup(player.Id, LoggedInUsersGroupName); clients[LoggedInUsersGroupName].playerLoggedOut(player); }
public GameSession(string id, Player owner) { Id = id; Owner = owner; GameIsOver = false; IsDraw = false; _gameBoard = new BoardMark?[9]; }
public virtual void OnPlayerLoggedOut(Player player) { }
/// <summary> /// End game with declaring looser /// </summary> public void EndWithLooser(Player looser) { EndWithWinner(looser == Owner ? Opponent : Owner); }
/// <summary> /// Desides if we have winner in game or not /// </summary> private bool WeHaveWinner(out Player winner) { Player won = null; WinningLines.ToList().ForEach(line => { if (_gameBoard[line[0]].HasValue && _gameBoard[line[0]] == _gameBoard[line[1]] && _gameBoard[line[1]] == _gameBoard[line[2]]) { won = _gameBoard[line[0]] == BoardMark.Owner ? Owner : Opponent; } }); winner = won; if (winner != null) { return true; } return false; }
/// <summary> /// Validates turn in game /// </summary> private void ValidateTurn(Player player, int turn) { if (WhosTurn != player) { throw new NotThisPlayersTurn(string.Format("It is not {0} turn", player.NickName)); } if (turn < 0 || turn > 8) { throw new EngineException("This is not valid turn"); } if (_gameBoard[turn].HasValue) { throw new EngineException("This is not valid turn, there is already mark in that cell"); } }
/// <summary> /// End game with declaring winner /// </summary> private void EndWithWinner(Player winner) { Winner = winner; Looser = winner == Owner ? Opponent : Owner; GameIsOver = true; }
/// <summary> /// Tries to make game turn /// </summary> public BoardMark MakeTurn(Player player, int turn) { ValidateTurn(player, turn); _gameBoard[turn] = player == Owner ? BoardMark.Owner : BoardMark.Opponent; WhosTurn = player == Owner ? Opponent : Owner; _turnCount++; CheckForGameEnd(); return player == Owner ? BoardMark.Owner : BoardMark.Opponent; }
/// <summary> /// Opponent trying to joing game /// </summary> public void Join(Player opponent) { if (Opponent != null) { throw new ThisGameInstanceIsFull(); } if (opponent == Owner) { throw new EngineException("You can not play with your self"); } Opponent = opponent; SetStartingPlaer(); }