Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 public void PlayTiles(PlayTilesTurn turn)
 {
     _gameBusi.PlayTiles(Context.ConnectionId, turn);
 }