예제 #1
0
파일: Map.cs 프로젝트: SocioDude/PlanetWars
        private void ApplyArrivals()
        {
            Dictionary <int, List <Fleet> > arrivalLocations = new Dictionary <int, List <Fleet> >();
            List <Fleet> toRemove = new List <Fleet>();

            foreach (Fleet f in Fleets)
            {
                if (f.RemainingTurns == 0)
                {
                    if (!arrivalLocations.ContainsKey(f.Destination))
                    {
                        arrivalLocations.Add(f.Destination, new List <Fleet>());
                    }

                    arrivalLocations[f.Destination].Add(f);
                    toRemove.Add(f);
                }
            }

            toRemove.ForEach(x => Fleets.Remove(x));

            foreach (var arrival in arrivalLocations)
            {
                Planet planet = Planets.First(x => x.Identifier == arrival.Key);
                if (planet == null)
                {
                    throw new Exception("Wha?  There's a fleet en route to a non-existant planet?");
                }

                ApplySpecificArrival(planet, arrival.Value);
            }
        }
예제 #2
0
파일: Map.cs 프로젝트: SocioDude/PlanetWars
        private void ApplyDepartures(List <Order> orders)
        {
            foreach (Order o in orders)
            {
                Planet sourcePlanet = Planets.First(x => x.Identifier == o.Source);
                if (sourcePlanet == null)
                {
                    throw new Exception("No source planet.  Order validation went wrong.");
                }

                Planet destinationPlanet = Planets.First(x => x.Identifier == o.Destination);
                if (destinationPlanet == null)
                {
                    throw new Exception("No destination planet.  Order validation went wrong.");
                }

                if (sourcePlanet.Ships < o.Ships)
                {
                    SetErrorMessage(o.Player, $"Tried to send too many ships from planet {o.Source}");
                }

                int totalTurns =
                    (int)Math.Ceiling(
                        Math.Sqrt(Math.Pow(destinationPlanet.X - sourcePlanet.X, 2) +
                                  Math.Pow(destinationPlanet.Y - sourcePlanet.Y, 2)));
                Fleets.Add(new Fleet(o.Player, o.Ships, o.Source, o.Destination, totalTurns, totalTurns));
                sourcePlanet.Ships -= o.Ships;
            }
        }