public void StartRound_RemainingPlayerCountIs2()
        {
            // Arrange
            var player1 = new PlayerState(Guid.Empty, null, null);
            IEnumerable <IRoundPlayerState> players = new[] { player1, new PlayerState(Guid.Empty, null, null) };
            var expected = players.Count();
            IShufflableCardState shufflableCard = new CardState(0, 0);
            IEnumerable <IShufflableCardState> shuffleableDeck = new[] { shufflableCard };
            IInitialRoundState initialRound = new RoundState(players, null, null, null, shufflableDeck: shuffleableDeck);

            var remainingPlayers = new List <IRoundPlayerState>();

            _roundFactory
            .Setup(rf => rf.CreateRemainingPlayers())
            .Returns(remainingPlayers);
            var removedFromRound = new List <ISetAsideCardState>();

            _roundFactory
            .Setup(rf => rf.CreateRemovedFromRound())
            .Returns(removedFromRound);

            IDrawableCardState drawableCardState = new CardState(0, 0);
            const int          cardSetAsideCount = 1;
            const int          turnDeckCount     = 1;
            int drawableCardCount = players.Count() + cardSetAsideCount + turnDeckCount;
            var drawableDeck      = Enumerable.Repeat(drawableCardState, drawableCardCount);

            _deckShuffleService
            .Setup(dss => dss.Shuffle(shuffleableDeck))
            .Returns(drawableDeck);

            IDiscardableCardState discardableCardState = new CardState(0, 0);

            _cardDrawService
            .Setup(cds => cds.Draw(drawableCardState))
            .Returns(discardableCardState);
            ISetAsideCardState setAsideCardState = new CardState(0, 0);

            _cardDrawService
            .Setup(cds => cds.SetAside(drawableCardState))
            .Returns(setAsideCardState);

            _deckRemovalService
            .Setup(drs => drs.GetCardsToRemoveCount(players.Count()))
            .Returns(cardSetAsideCount);

            IDrawableTurnState drawableTurnState = new TurnState(drawableCardState, player1);

            _turnStateFactory
            .Setup(tsf => tsf.CreateTurn(player1, drawableCardState))
            .Returns(drawableTurnState);

            // Act
            RoundStateFactory service = CreateService();
            var round  = service.StartRound(initialRound);
            var actual = round.RemainingPlayers.Count;

            // Assert
            Assert.AreEqual(expected, actual);
        }
        public void StartRound_DrawDeckHasOneCard()
        {
            // Arrange
            var player1 = new PlayerState(Guid.Empty, null, null, outOfRound: true);
            IEnumerable <IRoundPlayerState>    players         = new[] { player1, new PlayerState(Guid.Empty, null, null) };
            IShufflableCardState               shufflableCard  = new CardState(0, 0);
            IEnumerable <IShufflableCardState> shuffleableDeck = new[] { shufflableCard };
            IInitialRoundState initialRound = new RoundState(players, null, null, null, shufflableDeck: shuffleableDeck);

            var remainingPlayers = new List <IRoundPlayerState>();

            _roundFactory
            .Setup(rf => rf.CreateRemainingPlayers())
            .Returns(remainingPlayers);
            var removedFromRound = new List <ISetAsideCardState>();

            _roundFactory
            .Setup(rf => rf.CreateRemovedFromRound())
            .Returns(removedFromRound);

            IDrawableCardState drawableCardState = new CardState(0, 0);
            const int          cardSetAsideCount = 1;
            var expected                = new IDrawableCardState[] { new CardState(99, 108) };
            int drawableCardCount       = players.Count() + cardSetAsideCount;
            IDrawableCardState turnDeck = new CardState(88, 112);
            var drawableDeck            = expected.Concat(new[] { turnDeck }).Concat(Enumerable.Repeat(drawableCardState, drawableCardCount));

            _deckShuffleService
            .Setup(dss => dss.Shuffle(shuffleableDeck))
            .Returns(drawableDeck);

            IDiscardableCardState discardableCardState = new CardState(0, 0);

            _cardDrawService
            .Setup(cds => cds.Draw(drawableCardState))
            .Returns(discardableCardState);
            ISetAsideCardState setAsideCardState = new CardState(0, 0);

            _cardDrawService
            .Setup(cds => cds.SetAside(drawableCardState))
            .Returns(setAsideCardState);

            _deckRemovalService
            .Setup(drs => drs.GetCardsToRemoveCount(players.Count()))
            .Returns(cardSetAsideCount);

            IDrawableTurnState drawableTurnState = new TurnState(turnDeck, player1);

            _turnStateFactory
            .Setup(tsf => tsf.CreateTurn(player1, turnDeck))
            .Returns(drawableTurnState);

            // Act
            RoundStateFactory service = CreateService();
            var round  = service.StartRound(initialRound);
            var actual = round.DrawDeck;

            // Assert
            Assert.IsTrue(expected.SequenceEqual(actual));
        }
Example #3
0
        public Game(Canvas canvas)
        {
            this.canvas  = canvas;
            isRunning    = true;
            unitFactory  = new UnitFactory(canvas);
            stateFactory = new RoundStateFactory();
            Score.getInstance();
            inputHandler = new InputHandler(this, InputContainer.getInstance());

            //create rounds
            createRounds();

            bw = new BackgroundWorker();
            bw.ProgressChanged      += bw_ProgressChanged;
            bw.WorkerReportsProgress = true;
            bw.DoWork += bw_DoWork;
            stopwatch  = new Stopwatch();
            bw.RunWorkerAsync();
        }