Beispiel #1
0
        internal List <RoadCtrl> OwnedAdjacentRoadsNotCounted(List <RoadCtrl> owned, RoadCtrl blockedFork, out bool adjacentFork)
        {
            List <RoadCtrl> list = new List <RoadCtrl>();

            foreach (RoadCtrl r in AdjacentRoads)
            {
                if (r.IsOwned && r.Color == this.Color)
                {
                    if (r.AdjacentSettlements[0].Color != this.Color && r.AdjacentSettlements[0].SettlementType != SettlementType.None)
                    {
                        continue;
                    }
                    if (r.AdjacentSettlements[1].Color != this.Color && r.AdjacentSettlements[1].SettlementType != SettlementType.None)
                    {
                        continue;
                    }
                    if (owned.Contains(r) == false)
                    {
                        list.Add(r);
                    }
                }
            }

            adjacentFork = false;
            if (list.Contains(blockedFork))
            {
                list.Remove(blockedFork);
                adjacentFork = true;
            }

            return(list);
        }
Beispiel #2
0
 public LogRoadUpdate(int gameIndex, RoadCtrl road, RoadState oldState, RoadState newState)
 {
     OldRoadState = oldState;
     Road         = road;
     Index        = road.Index;
     NewRoadState = newState;
     GameIndex    = gameIndex;
 }
Beispiel #3
0
 internal void RemoveRoad(RoadCtrl road)
 {
     _data.GameData.Roads.Remove(road);
     RoadsPlayed--;
 }
Beispiel #4
0
 internal void AddRoad(RoadCtrl road)
 {
     _data.GameData.Roads.Add(road);
     RoadsPlayed++;
 }
Beispiel #5
0
        public static UpdateRoadModel SetRoadState(MainPage page, RoadCtrl road, RoadState newState, RoadRaceTracking raceTracker)
        {
            RoadState oldState = road.RoadState;

            if (newState == oldState)
            {
                throw new Exception("Why are you updating the road state to be the same state it already is?");
            }

            UpdateRoadModel model = new UpdateRoadModel()
            {
                Page            = page,
                Player          = page.CurrentPlayer,
                PlayerIndex     = page.CurrentPlayer.AllPlayerIndex,
                PlayerName      = page.CurrentPlayer.PlayerName,
                OldState        = page.NewGameState,
                Action          = CatanAction.UpdatedRoadState,
                RoadIndex       = road.Index,
                OldRoadState    = road.RoadState,
                NewRoadState    = newState,
                GameIndex       = page.GameContainer.CurrentGame.Index,
                OldRaceTracking = raceTracker
            };

            road.RoadState = newState;
            switch (newState)
            {
            case RoadState.Unowned:
                if (oldState == RoadState.Ship)
                {
                    model.Player.GameData.Ships.Remove(road);
                }
                else
                {
                    model.Player.GameData.Roads.Remove(road);
                }

                road.Owner  = null;
                road.Number = -1;
                break;

            case RoadState.Road:
                road.Number = model.Player.GameData.Roads.Count;     // undo-able
                model.Player.GameData.Roads.Add(road);
                road.Owner = model.Player;
                break;

            case RoadState.Ship:
                model.Player.GameData.Roads.Remove(road);     // can't be a ship if you aren't a road
                model.Player.GameData.Ships.Add(road);
                break;

            default:
                break;
            }

            string           raceTrackCopy  = JsonSerializer.Serialize <RoadRaceTracking>(raceTracker);
            RoadRaceTracking newRaceTracker = JsonSerializer.Deserialize <RoadRaceTracking>(raceTrackCopy);

            //await AddLogEntry(CurrentPlayer, GameState, CatanAction.UpdatedRoadState, true, logType, road.Number, new LogRoadUpdate(_gameView.CurrentGame.Index, road, oldState, road.RoadState));
            CalculateAndSetLongestRoad(page, newRaceTracker);

            model.NewRaceTracking = newRaceTracker;

            return(model);
        }