private Punt BepaalVolgendePunt(Punt vorigePunt, SpelerScore scoreVanAndereSpeler)
        {
            if (vorigePunt.IsGelijkAan(new StartPunt()))
            {
                return new EerstePunt();
            }

            if (vorigePunt.IsGelijkAan(new EerstePunt()))
            {
                return new TweedePunt();
            }

            if (vorigePunt.IsGelijkAan(new TweedePunt()))
            {
                return new DerdePunt();
            }

            if (vorigePunt.IsGelijkAan(new DerdePunt()))
            {
                return BepaalVolgendePuntBijDerdePunt(scoreVanAndereSpeler);
            }

            if (HeeftAdvantage())
            {
                _totaleGameScore.Verhoog();
                scoreVanAndereSpeler.ResetHuidigeGameScore();
                return new StartPunt();
            }

            throw new InvalidOperationException();
        }
        private Punt BepaalVolgendePuntBijDerdePunt(SpelerScore scoreVanAndereSpeler)
        {
            if (scoreVanAndereSpeler.ScoreIsGelijkAan(new DerdePunt()))
            {
                return new Advantage();
            }

            if (scoreVanAndereSpeler.HeeftAdvantage())
            {
                scoreVanAndereSpeler.ZetDeuce();
                return new DerdePunt();
            }

            if (!scoreVanAndereSpeler.HeeftAdvantage())
            {
                _totaleGameScore.Verhoog();
                scoreVanAndereSpeler.ResetHuidigeGameScore();
                return new StartPunt();
            }

            throw new InvalidOperationException();
        }
 public void VoegPuntToe(SpelerScore scoreVanAndereSpeler)
 {
     _huidigeGameScore = BepaalVolgendePunt(_huidigeGameScore, scoreVanAndereSpeler);
 }