public Response AddSet(List <PieceModel> set, string playerName) { var(response, game) = _rummyEngine.AddSet(Game, set, playerName); Game = game; OnDropSetOnTable.Invoke(); return(response); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public ResponseWithPiece DrawPiece(string playerName) { var(response, game) = _rummyEngine.DrawPieceFromPool(Game, playerName); Game = game; return(response); }
public void StartGame() { // todo: save this to memory cache/redis Game = _rummyEngine.InitilizeGame(Players); OnStartGame.Invoke(); }
public bool IsPlayerTurn(RummyModel model, string playerName) { return(model.CurrentPlayerTurn == playerName); }