public GameState Clone() { var gameState = new GameState(); gameState.VictoryPoints = VictoryPoints; gameState.Money = Money; gameState.NumberOfRounds = NumberOfRounds; gameState.ResidualMoney = ResidualMoney; gameState.RemainingBonusActions = RemainingBonusActions; gameState.Round = Round; gameState.Hand = Hand.Clone() as Hand; gameState.VineDeck = VineDeck.Clone(); gameState.OrderDeck = OrderDeck.Clone(); gameState.AutomaDeck = AutomaDeck.Clone(); gameState.SummerVisitorDeck = SummerVisitorDeck.Clone(); gameState.WinterVisitorDeck = WinterVisitorDeck.Clone(); gameState.Yoke = Yoke.Clone() as Yoke; gameState.Trellis = Trellis.Clone() as Trellis; gameState.Cottage = Cottage.Clone() as Cottage; gameState.Windmill = Windmill.Clone() as Windmill; gameState.Irigation = Irigation.Clone() as Irigation; gameState.LargeCellar = LargeCellar.Clone() as LargeCellar; gameState.TastingRoom = TastingRoom.Clone() as TastingRoom; gameState.MediumCellar = MediumCellar.Clone() as MediumCellar; gameState.Field1 = Field1.Clone() as Field; gameState.Field2 = Field2.Clone() as Field; gameState.Field3 = Field3.Clone() as Field; gameState.Grande = Grande.Clone() as Grande; gameState.NeutralWorker = NeutralWorker.Clone() as Worker; gameState._workers = new List <Worker>(); for (var i = 0; i < 5; i++) { gameState._workers.Add(_workers[i].Clone() as Worker); } gameState._redGrapes = new List <Grape>(); foreach (var redGrape in _redGrapes) { gameState._redGrapes.Add(redGrape.Clone() as Grape); } gameState._whiteGrapes = new List <Grape>(); foreach (var whiteGrape in _whiteGrapes) { gameState._whiteGrapes.Add(whiteGrape.Clone() as Grape); } gameState._redWines = new List <Wine>(); foreach (var redWine in _redWines) { gameState._redWines.Add(redWine.Clone() as Wine); } gameState._whiteWines = new List <Wine>(); foreach (var whiteWine in _whiteWines) { gameState._whiteWines.Add(whiteWine.Clone() as Wine); } gameState._blushWines = new List <Wine>(); foreach (var blushWine in _blushWines) { gameState._blushWines.Add(blushWine.Clone() as Wine); } gameState._sparklingWines = new List <Wine>(); foreach (var sparklingWine in _sparklingWines) { gameState._sparklingWines.Add(sparklingWine.Clone() as Wine); } return(gameState); }