public override Player GetWinner() { Player winningPlayer; if (!IsComplete) { winningPlayer = null; } else { var winningPoint = PlayerPoints.Cast <GamePoint>().ToList() .OrderByDescending(playerPoint => playerPoint.Amount) .FirstOrDefault(point => point.HasAdvantage || point.Amount == MininumPointsToWinGame); winningPlayer = Players.FirstOrDefault(player => player.PlayerID == winningPoint.PlayerID); } return(winningPlayer); }
protected override void Increase(int winningPlayerID) { if (IsDeuce()) { (PlayerPoints[winningPlayerID] as GamePoint).HasAdvantage = true; } else if (IsDeuceSavePoint(winningPlayerID)) { (PlayerPoints.Cast <GamePoint>().ToList()) .FirstOrDefault(pp => pp.HasAdvantage) .HasAdvantage = false; } else if (IsWinPoint(winningPlayerID)) { (PlayerPoints[winningPlayerID] as GamePoint).IsFinished = true; } else { UpdateWinningPlayerScore(winningPlayerID); } }
private bool IsDeuceSavePoint(int winningPlayerID) { return(PlayerPoints[winningPlayerID].Amount == MininumPointsToWinGame && (PlayerPoints.Cast <GamePoint>().ToList()).Any(pp => pp.HasAdvantage)); }
private bool IsSimpleScoringUpdate() { return((PlayerPoints.Cast <GamePoint>().ToList()).All(pp => pp.Amount <= MininumPointsToWinGame && !pp.HasAdvantage) && PlayerPoints.Any(pp => pp.Amount < MininumPointsToWinGame)); }