Example #1
0
        public void ClaimRoute(BoardRoute route, PlayerColor color)
        {
            var matchingRoute = Routes.Where(x => x.Origin == route.Origin && x.Destination == route.Destination && x.Color == route.Color && x.Length == route.Length && x.IsOccupied == false);

            if (matchingRoute.Any())
            {
                var firstRoute = matchingRoute.First();
                Routes.Remove(firstRoute);
                firstRoute.IsOccupied           = true;
                firstRoute.OccupyingPlayerColor = color;
                Routes.Add(firstRoute);
            }
        }
Example #2
0
        private bool ClaimRoute(BoardRoute route, TrainColor color)
        {
            // If we don't have enough train cars remaining to claim this route, we cannot do so.
            if (route.Length > RemainingTrainCars)
            {
                return(false);
            }

            // First see if we have enough cards in the hand to claim this route.
            var colorCards = Hand.Where(x => x.Color == color).ToList();

            // If we don't have enough color cards for this route...
            if (colorCards.Count < route.Length)
            {
                // ...see if we have enough Locomotive cards to fill the gap
                var gap             = route.Length - colorCards.Count;
                var locomotiveCards = Hand.Where(x => x.Color == TrainColor.Locomotive).ToList();

                // Cannot claim this route
                if (locomotiveCards.Count < gap)
                {
                    return(false);
                }

                var matchingWilds = Hand.GetMatching(TrainColor.Locomotive, gap);

                Board.DiscardPile.AddRange(matchingWilds);

                if (matchingWilds.Count != route.Length)
                {
                    var matchingColors = Hand.GetMatching(colorCards.First().Color, colorCards.Count);

                    Board.DiscardPile.AddRange(matchingColors);
                }

                // Method for placing the player colored train cars on the route
                Board.Routes.ClaimRoute(route, this.Color);

                // Add the cities to the list of connected cities
                ConnectedCities.Add(route.Origin);
                ConnectedCities.Add(route.Destination);

                ConnectedCities = ConnectedCities.Distinct().ToList();

                RemainingTrainCars -= route.Length;

                Console.WriteLine(Name + " claims the route " + route.Origin + " to " + route.Destination + "!");

                return(true);
            }

            // If we only need color cards to claim this route, discard the appropriate number of them
            var neededColorCards = Hand.Where(x => x.Color == color).Take(route.Length).ToList();

            foreach (var colorCard in neededColorCards)
            {
                Hand.Remove(colorCard);
                Board.DiscardPile.Add(colorCard);
            }

            // Mark the route as claimed on the board
            Board.Routes.ClaimRoute(route, this.Color);

            RemainingTrainCars -= route.Length;

            Console.WriteLine(Name + " claims the route " + route.Origin + " to " + route.Destination + "!");

            return(true);
        }