예제 #1
0
 public BlockadeGame(
     BlockadeConfiguration configuration,
     BlockadeState.BlockadeStateFactory blockadeStateFactory)
 {
     this._configuration        = configuration;
     this._blockadeStateFactory = blockadeStateFactory;
 }
예제 #2
0
 public static bool TryMakeConfiguration(
     int rows,
     int cols,
     List <Tuple <IBlockadePlayer, Tuple <int, int> > > playersWithStartingLocation,
     out BlockadeConfiguration blockadeConfiguration)
 {
     try
     {
         blockadeConfiguration = BlockadeConfiguration.MakeConfiguration(rows, cols, playersWithStartingLocation);
         return(true);
     }
     catch
     {
         blockadeConfiguration = null;
         return(false);
     }
 }
예제 #3
0
        private static BlockadeState CreateFromConfiguration(
            BlockadeConfiguration configuration,
            BoardCalculator.Factory boardCalculatorFactory)
        {
            var board           = Grid.Create(configuration.Rows, configuration.Cols, (row, col) => Cell.EmptyCell);
            var playerLocations = configuration.StartingLocations
                                  .Select(t => Location.Create(t.Item1, t.Item2))
                                  .ToArray();
            var finalResults  = new List <int>(capacity: configuration.Players.Count);
            var currentPlayer = 0;
            var turn          = 1;

            // place players at their initial positions
            foreach (var i in Enumerable.Range(0, playerLocations.Length))
            {
                var location = playerLocations[i];
                board[location] = Cell.MakeOccupiedCell(player: i, turn: 0);
            }

            return(new BlockadeState(boardCalculatorFactory, board, playerLocations, finalResults, currentPlayer, turn));
        }
예제 #4
0
 public BlockadeState CreateFromConfiguration(BlockadeConfiguration configuration)
 {
     return(BlockadeState.CreateFromConfiguration(configuration, this._boardCalculatorFactory));
 }