public IGuessBehaviour GetGuess(PlayerType playerType, IGuessSubject guessSubject)
        {
            IGuessBehaviour  guessBehaviour;
            IRandomGenerator randomGenerator = new RandomNumberGenerator();

            switch (playerType)
            {
            case PlayerType.Random:
                guessBehaviour = new RandomGuess();

                break;

            case PlayerType.Memory:
                guessBehaviour = new MemoryGuess(randomGenerator);

                break;

            case PlayerType.Thorough:
                guessBehaviour = new ThroughGuess();

                break;

            case PlayerType.Cheater:
                guessBehaviour = new CheatingRandomGuess(randomGenerator, guessSubject);

                break;

            case PlayerType.ThoroughCheater:
                guessBehaviour = new CheatingThoroughGuess(guessSubject);

                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(playerType), playerType, null);
            }

            return(guessBehaviour);
        }
예제 #2
0
 public CheatingThoroughGuess(IGuessSubject guessSubject)
 {
     _guessSubject = guessSubject;
     _guessSubject.RegisterObserver(this);
 }
예제 #3
0
 public Game(IGuessSubject guessSubject, IGuessFabric guessFabric, IRoundCalculator roundCalculator)
 {
     _guessSubject    = guessSubject;
     _guessFabric     = guessFabric;
     _roundCalculator = roundCalculator;
 }
예제 #4
0
 public CheatingRandomGuess(IRandomGenerator randomGenerator, IGuessSubject guessSubject)
 {
     _randomGenerator = randomGenerator;
     _guessSubject    = guessSubject;
     _guessSubject.RegisterObserver(this);
 }