public void putCardToTopXPos(Card card, int pos, Game game) { if (card != null && pos > -1) { LinkedList<Card> save = new LinkedList<>(); int idx = 1; while (hasCards() && idx < pos) { idx++; save.add(removeFromTop(game)); } putOnTop(card, game); while (!save.isEmpty()) { putOnTop(save.removeLast(), game); } } }
/** * Draw a card if possible (there is no replacement effect that prevent us * from drawing). Fire event about card drawn. * * @param game * @return */ protected int drawCard(Game game) { GameEvent event = GameEvent.getEvent(GameEvent.EventType.DRAW_CARD, player.getId(), player.getId()); event.addAppliedEffects(appliedEffects); if (!game.replaceEvent(event)) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { drawnCards.add(card); card.moveToZone(Zone.HAND, null, game, false); if (player.isTopCardRevealed()) { game.fireInformEvent(player.getLogName() + " draws a revealed card (" + card.getLogName() + ')'); } game.fireEvent(GameEvent.getEvent(GameEvent.EventType.DREW_CARD, card.getId(), player.getId())); return ArtificialScoringSystem.inst.getCardScore(card); } } return NEGATIVE_VALUE; }
protected void randomizePlayers(Game game, UUID playerId) { for (Player player: game.getState().getPlayers().values()) { if (!player.getId().equals(playerId)) { int handSize = player.getHand().size(); player.getLibrary().addAll(player.getHand().getCards(game), game); player.getHand().clear(); player.getLibrary().shuffle(); for (int i = 0; i < handSize; i++) { Card card = player.getLibrary().removeFromTop(game); card.setZone(Zone.HAND, game); player.getHand().add(card); } } else { player.getLibrary().shuffle(); } } }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { boolean putToPlay = true; Cards cards = new CardsImpl(); for (Player player : game.getPlayers().values()) { if (player.getLibrary().hasCards()) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { cards.add(card); if (!card.isCreature()) { putToPlay = false; } player.revealCards(source, "- Revealed by " + player.getName(), cards, game); } } else { putToPlay = false; } } if (putToPlay) { controller.moveCards(cards.getCards(game), Zone.BATTLEFIELD, source, game, false, false, true, null); } return true; } return false; } }
@Override public boolean putCardOnTopXOfLibrary(Card card, Game game, Ability source, int xFromTheTop) { if (card.isOwnedBy(getId())) { if (library.size() + 1 < xFromTheTop) { putCardsOnBottomOfLibrary(new CardsImpl(card), game, source, true); } else { if (card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true) && !(card instanceof PermanentToken) && !card.isCopy()) { card = getLibrary().removeFromTop(game); getLibrary().putCardToTopXPos(card, xFromTheTop, game); game.informPlayers(card.getLogName() + " is put into " + getLogName() + "'s library " + CardUtil.numberToOrdinalText(xFromTheTop) + " from the top"); } else { return false; } } } else { return game.getPlayer(card.getOwnerId()).putCardOnTopXOfLibrary(card, game, source, xFromTheTop); } return true; }
Card cardToPutBack = controller.getLibrary().removeFromTop(game); cardToManifest = controller.getLibrary().removeFromTop(game); controller.getLibrary().putOnTop(cardToPutBack, game); controller.getLibrary().putOnTop(cardToManifest, game);
newPlayer.getLibrary().shuffle(); for (int i = 0; i < handSize; i++) { Card card = newPlayer.getLibrary().removeFromTop(mcts); card.setZone(Zone.HAND, mcts); newPlayer.getHand().add(card);
Card card = opponent.getLibrary().removeFromTop(game); cards.add(card);
Card card = null; do { card = library.removeFromTop(game); if (card != null) { cards.add(card);