Example #1
0
        public void SwapTiles(string playerConnectionId, SwapTilesTurn turn)
        {
            var game = _gameRepository.GetGame(turn.GameId);

            if (game.CurrentTurnPlayerId != playerConnectionId)
            {
                //Not this players turn, invalidate player
                IsEndOfGame(game);
                _playerBusi.InvalidatePlayer(playerConnectionId, game.GameId.ToString());
                return;
            }

            //drawTiles if the player tries to draw more tiles than
            //there are in the bag That is an invalid move.
            if (game.TileBag.Count() < turn.TurnedInTiles.Count)
            {
                _playerBusi.InvalidatePlayer(playerConnectionId, game.GameId.ToString());
                if (IsEndOfGame(game))
                {
                    return;
                }
                StartNextTurn(game, 0, true, null, 0);
                return;
            }
            var newTiles  = game.TileBag.DrawTiles(turn.TurnedInTiles.Count);
            var validMove = _playerBusi.RemoveTilesFromHand(turn.TurnedInTiles, playerConnectionId);

            if (!validMove)
            {
                //invalid turn. They are trying to turn in a tile that wasn't in their hand.
                _playerBusi.InvalidatePlayer(playerConnectionId, game.GameId.ToString());
                IsEndOfGame(game);
                return;
            }

            game.TileBag.ReturnTiles(turn.TurnedInTiles);
            _playerBusi.AddTilesToHand(newTiles, playerConnectionId);

            //Send player their new hand
            _updater.UpdateClientEndTurnEvent(playerConnectionId, new EndTurnEvent {
                NewTiles = newTiles
            });

            StartNextTurn(game, 0, false, null, turn.TurnedInTiles.Count);
        }
Example #2
0
 public void SwapTiles(SwapTilesTurn turn)
 {
     _gameBusi.SwapTiles(Context.ConnectionId, turn);
 }