예제 #1
0
        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);
        }
예제 #2
0
        public void Undo()
        {
            if (UndoGame.Count > 0)
            {
                var temp = UndoGame[UndoGame.Count - 1];
                UndoGame.Remove(temp);
                Model = temp;

                ViewModel.UpdateBoard(Model);
                ViewModel.UpdatePlayers(Model);
            }
        }
예제 #3
0
        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);
        }