Esempio n. 1
0
        // Eliminates a player by removing from active player list, adding to
        // eliminated player list, and returning all tiles to the draw pile
        public void eliminatePlayer(SPlayer p)
        {
            if ((p.playerState != SPlayer.State.Placed) && (p.playerState != SPlayer.State.Playing))
            {
                throw new Exception("Player is being eliminated before having placed a start pawn.");
            }
            else if (!onBoard.Contains(p))
            {
                throw new Exception("Trying to eliminate a non-active player.");
            }


            // Add eliminated player's tiles to draw pile, and remove from his/her hand
            if (p.getHandSize() != 0)
            {
                List <Tile> hand     = p.returnHand();
                int         handSize = hand.Count;
                for (int i = 0; i < hand.Count; i++)
                {
                    Tile tempTile = hand[i];
                    p.removeTileFromHand(tempTile);
                    addTileToDrawPile(tempTile);
                    i--;
                }
            }

            int onBoardIndex = onBoard.FindIndex(x => p.returnColor() == x.returnColor());

            if (dragonTileHolder != null && dragonTileHolder.returnColor() == p.returnColor())
            {
                // Pass dragon tile to next player with less than 3 tiles in hand
                int     currIndex = onBoardIndex;
                SPlayer nextPlayer;
                do
                {
                    currIndex += 1;
                    nextPlayer = onBoard[(currIndex) % onBoard.Count];
                } while (nextPlayer.getHandSize() >= 3);

                if (nextPlayer.returnColor() == p.returnColor())
                {
                    dragonTileHolder = null;
                }
                else
                {
                    dragonTileHolder = nextPlayer;
                }
            }

            eliminated.Add(p);
            onBoard.Remove(p);
            p.eliminate();
        }
Esempio n. 2
0
        public static XElement splayerToXML(SPlayer player, Board board)
        {
            XElement splayerXML;

            if (board.existsDragonTileHolder() &&
                board.isDragonTileHolder(player.returnColor()))
            {
                splayerXML = new XElement("splayer-dragon");
            }
            else
            {
                splayerXML = new XElement("splayer-nodragon");
            }


            XElement handTileXML = playerHandToXML(player.returnHand());

            splayerXML.Add(new XElement("color", player.returnColor()),
                           handTileXML);
            return(splayerXML);
        }