public void PlaceTile(TileEnum tile) { UndoGame.Add(Model.DeepCopy()); var item = Model.Board[(int)tile]; if (item.Hotel != HotelEnum.NotUsed) { throw new Exception("Tile has already been placed!"); } item.Hotel = HotelEnum.Used; // Remove Tile from Player Model.Players[Model.ActivePlayer].TileBag.Remove(tile); // Get a New Tile PlayerGetNextTile(Model.Players[Model.ActivePlayer]); var adjacentTiles = GetAdjacent(tile); if (adjacentTiles.Count > 0) { var Hotel = HotelEnum.NotUsed; // Look for a Hotel foreach (var test in adjacentTiles) { if (Model.Board[(int)test].Hotel.IsHotel()) { Hotel = Model.Board[(int)test].Hotel; // If we find a hotel then break out of our search and use the Hotel found break; } if (Model.Board[(int)test].Hotel == HotelEnum.Used) { Hotel = HotelEnum.Used; } } if (!Hotel.IsHotel()) { Hotel = GetNextHotel(); } if (Hotel.IsHotel()) { item.Hotel = Hotel; ExpandTiles(adjacentTiles, Hotel); } } // Move to Next Player NextPlayer(); Model.LastTilePlaced = (TileEnum)item.Index; ViewModel.UpdateBoard(Model); ViewModel.UpdatePlayers(Model); }
public void Undo() { if (UndoGame.Count > 0) { var temp = UndoGame[UndoGame.Count - 1]; UndoGame.Remove(temp); Model = temp; ViewModel.UpdateBoard(Model); ViewModel.UpdatePlayers(Model); } }
public void StartGame(StartGameArgs args) { UndoGame.Clear(); Model.NumberOfPlayers = args.NumberOfPlayers; Model.Players[0].Name = args.Player1; Model.Players[1].Name = args.Player2; Model.Players[2].Name = args.Player3; Model.Players[3].Name = args.Player4; Model.Players[4].Name = args.Player5; Model.Players[5].Name = args.Player6; Model.TileBag.Reset(); // Reset Hotels foreach (var item in Model.Hotels) { item.Active = false; } // Reset the Board foreach (var item in Model.Board) { item.Hotel = HotelEnum.NotUsed; } for (int i = 0; i < args.NumberOfPlayers; i++) { Model.Players[i].Prepare(Model.TileBag); } Model.ActivePlayer = 0; ViewModel.UpdateBoard(Model); ViewModel.UpdatePlayers(Model); ViewModel.StartGame(Model); }