public async Task FruitShouldFirstAppearAfterSetNumberOfPills() { var fruitLocation = _gameSettings.PacMan.Location.FarAway(); _gameSettings.Fruit = fruitLocation; _gameSettings.FruitAppearsAfterCoinsEaten.Add(5); _gameSettings.Coins.Add(_gameSettings.PacMan.Location.Left); for (var i = 1; i <= 5; i++) { _gameSettings.Coins.Add(_gameSettings.Coins[i - 1].Left); } var game = new Game(_gameClock, _gameSettings); game.StartGame(); await game.ChangeDirection(Direction.Left); await _gameClock.Tick(); await _gameClock.Tick(); await _gameClock.Tick(); await _gameClock.Tick(); await _gameClock.Tick(); game.Fruits.Should().BeEquivalentTo(new { Location = _gameSettings.Fruit, Type = FruitType.Cherry }); }
private async Task PlayUntilBonusLife(Game game) { game.StartGame(); await game.ChangeDirection(Direction.Down); await _gameClock.Tick(); }
public async Task EatingFruitOnEveryLevel(int levelNumber, int scoreIncrement) { var now = DateTime.UtcNow; var gameClock = new TestGameClock(); _gameSettings.Coins.Add(_gameSettings.PacMan.Location.Left); _gameSettings.Coins.Add(_gameSettings.PacMan.Location.Left.Left); _gameSettings.Fruit = _gameSettings.PacMan.Location.Left.Above; _gameSettings.FruitAppearsAfterCoinsEaten.Add(1); var game = new Game(gameClock, _gameSettings); game.StartGame(); for (var level = 0; level < levelNumber - 1; level++) { await game.ChangeDirection(Direction.Left); await gameClock.Tick(now); //Fruit appears await gameClock.Tick(now); //Level completed if (game.Status != GameStatus.ChangingLevel) { throw new Exception($"Game status should be GameStatus.ChangingLevel not {game.Status}"); } WeExpectThat(game.PacMan).IsAt(_gameSettings.PacMan.Location.Left.Left); await gameClock.Tick(now.AddSeconds(7)); //Screen flashes WeExpectThat(game.PacMan).IsAt(_gameSettings.PacMan.Location); } await game.ChangeDirection(Direction.Left); await gameClock.Tick(now.AddSeconds(7)); // Eat coin, fruit appears WeExpectThat(game.PacMan).IsAt(_gameSettings.PacMan.Location.Left); await game.ChangeDirection(Direction.Up); var score = game.Score; await gameClock.Tick(); // Eat coin, fruit appears game.Should().BeEquivalentTo(new { Level = levelNumber, Score = score + scoreIncrement }); }
public async Task IncrementsScoreBy50WhenPowerPillCollected() { _gameSettings.PowerPills.Add(_gameSettings.PacMan.Location.Below); var game = new Game(_gameClock, _gameSettings); game.StartGame(); await game.ChangeDirection(Direction.Down); await _gameClock.Tick(); game.Score.Should().Be(50); }
public async Task GameContainsAllCoins() { var gameBoard = new TestGameSettings(); gameBoard.Coins.Add((1, 1)); gameBoard.Coins.Add((1, 2)); gameBoard.Coins.Add((2, 2)); var gameClock = new TestGameClock(); var game = new Game(gameClock, gameBoard); game.StartGame(); await gameClock.Tick(); game.Coins.Should().BeEquivalentTo( new CellLocation(1, 1), new CellLocation(1, 2), new CellLocation(2, 2) ); }
public async Task LivesStayTheSameWhenNotCollidingWithAGhost() { var ghost = GhostBuilder.New().WithLocation(_gameSettings.PacMan.Location.Right).Create(); _gameSettings.Ghosts.Add(ghost); var game = new Game(_gameClock, _gameSettings); game.StartGame(); var currentLives = game.Lives; await game.ChangeDirection(Direction.Left); await _gameClock.Tick(); game.Lives.Should().Be(currentLives); }
public async Task LivesStayTheSameWhenNotCollidingWithAGhost() { var x = _gameSettings.PacMan.Location.X + 1; var y = _gameSettings.PacMan.Location.Y; _gameSettings.Ghosts.Add(new Ghost("Ghost1", new CellLocation(x, y), Direction.Left, CellLocation.TopLeft, new StandingStillGhostStrategy())); var game = new Game(_gameClock, _gameSettings); game.StartGame(); var currentLives = game.Lives; game.ChangeDirection(Direction.Left); await _gameClock.Tick(); game.Lives.Should().Be(currentLives); }
public async Task PacManWalksInFacingDirection(Direction directionToFace, int changeInX, int changeInY) { var game = new Game(_gameClock, _gameSettings); game.StartGame(); var(x, y) = game.PacMan.Location; game.ChangeDirection(directionToFace); await _gameClock.Tick(); game.PacMan.Should().BeEquivalentTo(new { Location = new CellLocation(x + changeInX, y + changeInY), Direction = directionToFace }); }
public async Task GhostMovesInDirectionOfStrategy() { var ghost = GhostBuilder.New() .WithChaseStrategyRight() .Create(); _gameSettings.Ghosts.Add(ghost); var game = new Game(_gameClock, _gameSettings); game.StartGame(); await _gameClock.Tick(); game.Ghosts[ghost.Name].Should().BeEquivalentTo(new { Location = new { X = 1, Y = 0 } }); }
public async Task ScoreDoesNotChangeWhenNoCoinIsCollected() { var game = new Game(_gameClock, _gameSettings); var score = game.Score; game.ChangeDirection(Direction.Down); await _gameClock.Tick(); game.Score.Should().Be(score); }
public async Task GhostMovesInDirectionOfStrategy() { var strategy = new GhostGoesRightStrategy(); _gameSettings.Ghosts.Add(new Ghost("Ghost1", new CellLocation(0, 0), Direction.Left, CellLocation.TopLeft, strategy)); var game = new Game(_gameClock, _gameSettings); game.StartGame(); await _gameClock.Tick(); game.Ghosts["Ghost1"].Should().BeEquivalentTo(new { Location = new { X = 1, Y = 0 } }); }