// 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(); }
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); }