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); }