public void PlayTiles(string playerConnectionId, PlayTilesTurn turn) { var game = _gameRepository.GetGame(turn.GameId); if (game.CurrentTurnPlayerId != playerConnectionId) { //Not this players turn, invalidate player _playerBusi.InvalidatePlayer(playerConnectionId, game.GameId.ToString()); IsEndOfGame(game); return; } var validMove = _playerBusi.RemoveTilesFromHand(turn.Placements.Select(p => p.Tile).ToList(), playerConnectionId); if (!validMove) { //invalid turn. They are trying to play a tile that wasn't in their hand. _playerBusi.InvalidatePlayer(playerConnectionId, game.GameId.ToString()); IsEndOfGame(game); } var score = game.GameBoard.AddTiles(turn.Placements); if (score == -1) { //Invalid move. Player banned. _playerBusi.InvalidatePlayer(playerConnectionId, game.GameId.ToString()); if (IsEndOfGame(game)) { return; } StartNextTurn(game, 0, true, null, 0); return; } _playerBusi.AddScore(score, playerConnectionId); var newTiles = game.TileBag.DrawTiles(turn.Placements.Count); _playerBusi.AddTilesToHand(newTiles, playerConnectionId); if (IsEndOfGame(game)) { return; } //Send player their new hand _updater.UpdateClientEndTurnEvent(playerConnectionId, new EndTurnEvent { NewTiles = newTiles }); StartNextTurn(game, score, !validMove, turn.Placements, 0); }
public void PlayTiles(PlayTilesTurn turn) { _gameBusi.PlayTiles(Context.ConnectionId, turn); }