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