コード例 #1
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public GameStateAdvantage(TennisGame game, Party advantageParty)
     : base(game)
 {
     _advantageParty = advantageParty;
 }
コード例 #2
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public abstract IGameState PointAdded(Party party);
コード例 #3
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public int GetSetScore(Party party)
 {
     return _currentSet.GetSetScore(party);
 }
コード例 #4
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
        public void AddPoint(Party party)
        {
            if (SetOver)
                throw new InvalidOperationException("Cannot add points to won sets.");

            _currentGame.AddPoint(party);

            if (_currentGame.GameOver)
            {
                IncreaseScore(party);
                _setState = _setState.GameAdded(party);

                if (!_setState.SetOver)
                    _currentGame = _setState.GetNextGame(_tournamentRules);
            }
        }
コード例 #5
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public ISetState GameAdded(Party party)
 {
     throw new InvalidOperationException("Games cannot be added to a won set.");
 }
コード例 #6
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
        public void AddPoint(Party party)
        {
            if (GameOver)
                throw new InvalidOperationException("Cannot add points to won games.");

            IncreaseScore(party);
            _gameState = _gameState.PointAdded(party);
        }
コード例 #7
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public abstract IMatchState SetAdded(Party party);
コード例 #8
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
        public override ISetState GameAdded(Party party)
        {
            int score = Set.GetScore(party);
            int opposingScore = Set.GetOpposingScore(party);

            if (score > 6)
                return new SetStateWon(Set, party);

            if (ScoreHelper.IsAboveWithMargin(score, opposingScore, 6, 2))
                return new SetStateWon(Set, party);

            return this;
        }
コード例 #9
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public GameStateWon(TennisGame game, Party winningParty)
     : base(game)
 {
     _winningParty = winningParty;
 }
コード例 #10
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public override IGameState PointAdded(Party party)
 {
     throw new InvalidOperationException("Cannot add points to a won game.");
 }
コード例 #11
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
        public override IGameState PointAdded(Party party)
        {
            int newScore = Game.GetScore(party);
            int oppScore = Game.GetOpposingScore(party);

            if (ScoreHelper.IsAboveWithMargin(newScore, oppScore, 7, 2))
                return new GameStateWon(Game, party);

            return this;
        }
コード例 #12
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
        public override IGameState PointAdded(Party party)
        {
            if (Game.GetScore(party) == 4)
                return new GameStateWon(Game, party);

            return this;
        }
コード例 #13
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public override IGameState PointAdded(Party party)
 {
     return new GameStateAdvantage(Game, party);
 }
コード例 #14
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
        public int IncreaseScore(Party party)
        {
            if (party == PartyA)
            {
                ScoreA += 1;
                return ScoreA;
            }

            ScoreB += 1;
            return ScoreB;
        }
コード例 #15
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
        public override IMatchState SetAdded(Party party)
        {
            if (Match.GetScore(party) >= 3)
                return new MatchStateWon(Match, party);

            return this;
        }
コード例 #16
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public abstract ISetState GameAdded(Party party);
コード例 #17
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public MatchStateWon(TennisMatch match, Party winningParty)
     : base(match)
 {
     _winningParty = winningParty;
 }
コード例 #18
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public SetStateWon(TennisSet set, Party winningParty)
 {
     _set = set;
     _winningParty = winningParty;
 }
コード例 #19
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public override IMatchState SetAdded(Party party)
 {
     throw new InvalidOperationException("Sets cannot be added to a won match.");
 }
コード例 #20
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public TennisGame(Party partyA, Party partyB, Func<TennisGame, IGameState> gameStateFactory)
     : base(partyA, partyB)
 {
     _gameState = gameStateFactory(this);
 }
コード例 #21
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public ScoringContext(Party partyA, Party partyB)
 {
     PartyA = partyA;
     PartyB = partyB;
 }
コード例 #22
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
        public void AddPoint(Party party)
        {
            if (_matchState.MatchOver)
                throw new InvalidOperationException("Cannot add points to won matches.");

            _currentSet.AddPoint(party);

            if (_currentSet.SetOver)
            {
                IncreaseScore(party);
                _matchState = _matchState.SetAdded(party);

                if (!_matchState.MatchOver)
                    _currentSet = _matchState.GetNextSet(_tournamentRules);
            }
        }
コード例 #23
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public ScoringContext(Party partyA, Party partyB, int scoreA, int scoreB)
 {
     PartyA = partyA;
     PartyB = partyB;
     ScoreA = scoreA;
     ScoreB = scoreB;
 }
コード例 #24
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public TennisSet(ITournamentRules tournamentRules, Party partyA, Party partyB, Func<TennisSet, ISetState> setStateFactory)
     : base(partyA, partyB)
 {
     _setState = setStateFactory(this);
     _tournamentRules = tournamentRules;
     _currentGame = _setState.GetNextGame(tournamentRules);
 }
コード例 #25
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
        public int GetOpposingScore(Party party)
        {
            if (party == PartyB)
            {
                return ScoreA;
            }

            return ScoreB;
        }
コード例 #26
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
 public int GetSetScore(Party party)
 {
     return GetScore(party);
 }
コード例 #27
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
        public int GetScore(Party party)
        {
            if (party == PartyA)
            {
                return ScoreA;
            }

            return ScoreB;
        }
コード例 #28
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
        public override IGameState PointAdded(Party party)
        {
            if (party == _advantageParty)
                return new GameStateWon(Game, _advantageParty);

            return new GameStateDeuce(Game);
        }
コード例 #29
0
ファイル: Tennis.cs プロジェクト: rasmuskl/ReSharperCourse
        public override IGameState PointAdded(Party party)
        {
            if (Game.GetScore(party) == 3 && Game.GetOpposingScore(party) == 3)
                return new GameStateDeuce(Game);

            if (Game.GetScore(party) == 4)
                return new GameStateWon(Game, party);

            return this;
        }