Exemple #1
0
 public Response AddSet(List <PieceModel> set, string playerName)
 {
     var(response, game) = _rummyEngine.AddSet(Game, set, playerName);
     Game = game;
     OnDropSetOnTable.Invoke();
     return(response);
 }
Exemple #2
0
        public (ResponseWithPiece, RummyModel) DrawPieceFromPool(RummyModel game, string playerName)
        {
            if (!IsPlayerTurn(game, playerName))
            {
                var errorResponse = new ResponseWithPiece {
                    Success = false, Message = "It is not your turn"
                };
                return(errorResponse, game);
            }

            if (game.HasDrawnPiece)
            {
                var errorResponse = new ResponseWithPiece
                {
                    Success = false,
                    Message = "You have already drawn a piece this turn"
                };
                return(errorResponse, game);
            }

            var random = new Random();
            var i      = random.Next(game.PiecesPool.Count);
            var piece  = game.PiecesPool[i];

            game.PiecesPool.RemoveAt(i);
            game.Players[playerName].PiecesOnBoard.Add(piece);
            game.HasDrawnPiece = true;
            var response = new ResponseWithPiece {
                Success = true, Piece = piece
            };

            return(response, game);
        }
Exemple #3
0
        public RummyModel InitilizeGame(List <string> playersNames)
        {
            var piecesPool = GeneratePieces();
            var players    = playersNames.ToDictionary(p => p, p => new Player());

            foreach (var player in players)
            {
                var(pieces, remainingPieces) = Draw14PiecesFromPool(piecesPool);
                piecesPool = remainingPieces;
                player.Value.PiecesOnBoard = pieces;
                player.Value.Sets          = new List <List <PieceModel> >();
            }

            var rummyModel = new RummyModel
            {
                PiecesPool        = piecesPool,
                Players           = players,
                PlayerOrder       = playersNames,
                CurrentPlayerTurn = RandomlyChoseFirstPlayer(players),
                GameEnded         = false,
                PiecesOnTable     = new List <PieceModel>()
                {
                    new PieceModel(PieceModel.Types.Empty,
                                   PieceModel.Locations.Board)
                }
            };

            return(rummyModel);
        }
Exemple #4
0
        public (Response, RummyModel) AddSet(RummyModel game, List <PieceModel> set, string playerName)
        {
            if (!IsPlayerTurn(game, playerName))
            {
                var errorTurnResponse = new ResponseWithPiece {
                    Success = false, Message = "It is not your turn"
                };
                return(errorTurnResponse, game);
            }

            if (_pieceTypeChecker.IsSet(set))
            {
                var newSet = set.Select(p =>
                {
                    var piece      = p.ShallowCopy();
                    piece.Location = PieceModel.Locations.piecesSetOnTable;
                    return(piece);
                }).ToList();
                game.Players[playerName].Sets.Add(newSet);
                game.Players[playerName].Score += CalculateScore(set);
                var response = new Response {
                    Success = true
                };
                return(response, game);
            }

            var errorResponse = new Response
            {
                Success = false,
                Message = "Selected pieces do not form a set"
            };

            return(errorResponse, game);
        }
Exemple #5
0
 public Response AddPieceToSet(int setIndex, string setPlayerName, bool right,
                               PieceModel piece, string playerName)
 {
     var(response, game) = _rummyEngine.AddPieceToSet(Game, setIndex, setPlayerName, right, piece, playerName);
     Game = game;
     OnDropSetOnTable.Invoke();
     return(response);
 }
Exemple #6
0
 public Response DropPieceOnTable(PieceModel source, string playerName)
 {
     var(response, game) = _rummyEngine.AddPieceOnTable(Game, source, playerName);
     Game = game;
     OnDropPieceOnTable.Invoke();
     if (game.GameEnded)
     {
         OnGameEnd.Invoke();
     }
     return(response);
 }
Exemple #7
0
        public (Response, RummyModel) AddPieceToSet(RummyModel game, int setIndex,
                                                    string setPlayerName, bool right, PieceModel piece, string playerName)
        {
            if (!IsPlayerTurn(game, playerName))
            {
                var errorTurnResponse = new ResponseWithPiece {
                    Success = false, Message = "It is not your turn"
                };
                return(errorTurnResponse, game);
            }

            var set  = new List <PieceModel>(game.Players[setPlayerName].Sets[setIndex]);
            var temp = piece.ShallowCopy();

            temp.Location = PieceModel.Locations.piecesSetOnTable;
            if (right)
            {
                set.Add(temp);
            }
            else
            {
                set.Insert(0, temp);
            }

            if (_pieceTypeChecker.IsSet(set))
            {
                game.Players[setPlayerName].Sets[setIndex] = set;
                game.Players[playerName].Score            += CalculateScore(new List <PieceModel> {
                    piece
                });
                var response = new Response {
                    Success = true
                };
                return(response, game);
            }

            var errorResponse = new Response
            {
                Success = false,
                Message = "Piece does add to set"
            };

            return(errorResponse, game);
        }
Exemple #8
0
        public (Response, RummyModel) AddPieceOnTable(RummyModel game, PieceModel piece, string playerName)
        {
            if (!IsPlayerTurn(game, playerName))
            {
                var errorResponse = new ResponseWithPiece {
                    Success = false, Message = "It is not your turn"
                };
                return(errorResponse, game);
            }

            if (!game.HasDrawnPiece)
            {
                var errorResponse = new ResponseWithPiece
                {
                    Success = false,
                    Message = "You must draw a piece first"
                };
                return(errorResponse, game);
            }

            var tmp = piece.ShallowCopy();

            tmp.Location = PieceModel.Locations.Table;
            game.PiecesOnTable.Insert(game.PiecesOnTable.Count - 1, tmp);
            game.Players[playerName].PiecesOnBoard.Remove(piece);
            game.CurrentPlayerTurn = PassTurn(game.PlayerOrder, game.CurrentPlayerTurn);
            game.HasDrawnPiece     = false;
            if (game.Players[playerName].PiecesOnBoard.Count == 0)
            {
                game.GameEnded = true;
                game.Players[playerName].Score += 50;
                foreach (var player in game.Players)
                {
                    player.Value.Score -= CalculateScore(player.Value.PiecesOnBoard);
                }
            }
            var response = new Response {
                Success = true
            };

            return(response, game);
        }
Exemple #9
0
 public ResponseWithPiece DrawPiece(string playerName)
 {
     var(response, game) = _rummyEngine.DrawPieceFromPool(Game, playerName);
     Game = game;
     return(response);
 }
Exemple #10
0
 public void StartGame()
 {
     // todo: save this to memory cache/redis
     Game = _rummyEngine.InitilizeGame(Players);
     OnStartGame.Invoke();
 }
Exemple #11
0
 public bool IsPlayerTurn(RummyModel model, string playerName)
 {
     return(model.CurrentPlayerTurn == playerName);
 }