private IEnumerable <KeyValuePair <int, PlanetData> > GeneratePlanets() { var totalCells = _map.CellsCount; var totalPlanets = _state.NeutralPlanetsCount + _state.Players.Count; var planets = Sequences .NumbersRangeLong(0, totalCells) .Shuffle() .Take(totalPlanets) .Select(GeneratePlanet); return(planets); }
public void PlacePlanet(Guid playerId) { if (_state.Players.Contains(playerId)) { return; } if (!CanPlacePlanet) { throw new InvalidOperationException("No free cells on the map"); } _state.Players.Add(playerId); var freeCoordinate = Sequences .NumbersRangeLong(0, _map.CellsCount) .Where(x => !_map.ContainsPlanet(x)) .Shuffle() .First(); _namesEnumerator.MoveNext(); var planet = _playerPlanetGenerator.Generate(_namesEnumerator.Current, playerId); _map[freeCoordinate] = planet; }