public PandemicGame() { var initialState = new PandemicGameState(PandemicBoard.CreateRealGameBoard()); var actionProcessorFactory = new ActionProcessorFactory(); _stateMachine = new PandemicStateMachine(initialState, actionProcessorFactory); }
public void GivenRealBoard_ProcessInit_ShouldInitialiseGameCorrectly() { var state = new PandemicGameState(PandemicBoard.CreateRealGameBoard()); _processor.ProcessAction(state, new InitGameAction()); Assert.AreEqual(2, state.InfectionRate); Assert.AreEqual(0, state.OutbreakCounter); // should have drawn 9 infection cards Assert.AreEqual(48 - 9, state.InfectionDeck.Count); Assert.AreEqual(9, state.InfectionDiscardPile.Count); // 9 cities should have cubes on them Assert.AreEqual(3, state.CityStates.Count(c => c.NumCubes(c.Colour) == 3)); Assert.AreEqual(3, state.CityStates.Count(c => c.NumCubes(c.Colour) == 2)); Assert.AreEqual(3, state.CityStates.Count(c => c.NumCubes(c.Colour) == 1)); // cubes should have been removed from pile var sumOfAllCubesInPile = ColourExtensions.AllColours() .Select(colour => state.CubePile.NumCubes(colour)) .Sum(); Assert.AreEqual(4 * 24 - 9 - 6 - 3, sumOfAllCubesInPile); }
public void GivenRealBoard_StateShouldBeReadyToInit() { var state = new PandemicGameState(PandemicBoard.CreateRealGameBoard()); // no cubes on any cities Assert.AreEqual(0, state.CityStates.Sum(c => c.NumCubes(Colour.Red))); Assert.AreEqual(0, state.CityStates.Sum(c => c.NumCubes(Colour.Blue))); Assert.AreEqual(0, state.CityStates.Sum(c => c.NumCubes(Colour.Black))); Assert.AreEqual(0, state.CityStates.Sum(c => c.NumCubes(Colour.Yellow))); Assert.AreEqual(48, state.InfectionDeck.Count); Assert.AreEqual(0, state.InfectionDiscardPile.Count); Assert.AreEqual(24, state.CubePile.NumCubes(Colour.Red)); Assert.AreEqual(24, state.CubePile.NumCubes(Colour.Blue)); Assert.AreEqual(24, state.CubePile.NumCubes(Colour.Black)); Assert.AreEqual(24, state.CubePile.NumCubes(Colour.Yellow)); }
private static void InitialInfectCities(PandemicGameState state) { for (var numCubes = 1; numCubes <= 3; numCubes++) { for (var i = 0; i < 3; i++) { var cityName = state.InfectionDeck.Pop(); var city = state.GetCity(cityName); for (var j = 0; j < numCubes; j++) { state.CubePile.RemoveCube(city.Colour); city.AddCube(city.Colour); } state.InfectionDiscardPile.Push(cityName); } } }
public PandemicStateMachine(PandemicGameState initialState, IActionProcessorFactory processorFactory) { State = initialState; _processorFactory = processorFactory; }
public void ProcessAction(PandemicGameState state, IAction action) { InitialInfectCities(state); }