Esempio n. 1
0
        public async Task GhostsShouldLeaveGhostHouseWhenPillCountHasBeenReached()
        {
            // X
            // -
            // H G

            var ghostStart1 = new CellLocation(1, 2);

            _gameSettings.PacMan = new PacMan(ghostStart1.FarAway(), Direction.Left);
            _gameSettings.GhostHouse.AddRange(new[] { ghostStart1, ghostStart1.Left });
            _gameSettings.Doors.Add(ghostStart1.Left.Above);
            var ghost1 = GhostBuilder.New()
                         .WithLocation(ghostStart1)
                         .WithNumberOfCoinsRequiredToExitHouse(1)
                         .Create();
            var ghost2 = GhostBuilder.New()
                         .WithLocation(ghostStart1)
                         .WithNumberOfCoinsRequiredToExitHouse(10)
                         .Create();

            _gameSettings.Ghosts.Add(ghost1);
            _gameSettings.Ghosts.Add(ghost2);

            _gameSettings.Coins.Add(_gameSettings.PacMan.Location.FarAway());
            _gameSettings.Coins.Add(_gameSettings.PacMan.Location.Left);

            var game = new Game(_gameClock, _gameSettings);

            game.StartGame();
            await game.ChangeDirection(Direction.Left);

            // PacMan Eats Coin
            await _gameClock.Tick();

            // Still in House, under door
            await _gameClock.Tick();

            // On ghost door
            await _gameClock.Tick();

            // Out of house
            await _gameClock.Tick();

            using var _ = new AssertionScope();
            game.Ghosts[ghost1.Name].Should().BeEquivalentTo(new
            {
                Location = ghostStart1.Left.Above.Above
            });
            game.Ghosts[ghost2.Name].Should().BeEquivalentTo(new
            {
                Location = ghostStart1
            });
        }