protected void passLeft() { synchronized (players) { UUID startId = table.get(0); UUID currentId = startId; UUID nextId = table.getNext(); DraftPlayer current = players.get(currentId); DraftPlayer next = players.get(nextId); List<Card> currentBooster = current.booster; while (true) { List<Card> nextBooster = next.booster; next.setBooster(currentBooster); if (Objects.equals(nextId, startId)) { break; } currentBooster = nextBooster; nextId = table.getNext(); next = players.get(nextId); } } }
@Override public boolean apply(Game game, Ability source) { PlayerList playerList = game.getPlayerList().copy(); playerList.setCurrent(game.getActivePlayerId()); Player player = game.getPlayer(game.getActivePlayerId()); do { processPlayer(game, source, player); player = playerList.getNext(game); } while (!player.getId().equals(game.getActivePlayerId())); return true; }
private UUID getNextPlayerInDirection(boolean left, PlayerList playerList, Game game) { UUID nextPlayerId; if (left) { nextPlayerId = playerList.getNext(); } else { nextPlayerId = playerList.getPrevious(); } return nextPlayerId; } }
protected void passRight() { synchronized (players) { UUID startId = table.get(0); UUID currentId = startId; UUID prevId = table.getPrevious(); DraftPlayer current = players.get(currentId); DraftPlayer prev = players.get(prevId); List<Card> currentBooster = current.booster; while (true) { List<Card> prevBooster = prev.booster; prev.setBooster(currentBooster); if (Objects.equals(prevId, startId)) { break; } currentBooster = prevBooster; prevId = table.getPrevious(); prev = players.get(prevId); } } }
PlayerList playerList = game.getState().getPlayerList().copy(); while (!playerList.get().equals(source.getControllerId()) && controller.canRespond()) { playerList.getNext(); Player currentPlayer = game.getPlayer(playerList.get()); Player nextPlayer; UUID firstNextPlayer = null; nextPlayer = game.getPlayer(playerList.get()); if (nextPlayer == null) { return false; if (currentPlayer != null && game.getState().getPlayersInRange(controller.getId(), game).contains(currentPlayer.getId())) { Map<Integer, Set<UUID>> playerPiles = new HashMap<>(); for (int i = 1; i < 4; i++) {
PlayerList playerList = game.getPlayerList().copy(); playerList.setCurrent(game.getActivePlayerId()); Player nextPlayer; do { Player current = playerList.getCurrent(game); if (cardController != null && current.getId().equals(controller.getId())) { topController = current.chooseUse(Outcome.Detriment, "Put " + cardController.getLogName() + " back on top of your library? (otherwise it goes to bottom)", source, game); topOpponent = current.chooseUse(Outcome.Detriment, "Put " + cardOpponent.getLogName() + " back on top of your library? (otherwise it goes to bottom)", source, game); nextPlayer = playerList.getNext(game); } while (nextPlayer != null && !nextPlayer.getId().equals(game.getActivePlayerId()));
if (!resuming) { state.getPlayers().resetPassed(); state.getPlayerList().setCurrent(activePlayerId); } else { state.getPlayerList().setCurrent(this.getPriorityPlayerId()); bookmark = bookmarkState(); player = getPlayer(state.getPlayerList().get()); state.setPriorityPlayerId(player.getId()); while (!player.isPassed() && player.canRespond() && !isPaused() && !checkIfGameIsOver()) { state.getPlayerList().getNext();
UUID currentId = table.get(); if (currentId.equals(oldPlayer.getId())) { currentId = newPlayer.getId(); table.clear(); for (UUID playerId : players.keySet()) { table.add(playerId); table.setCurrent(currentId);
public Player getCurrent(Game game) { return game.getPlayer(this.get()); }
@Override public boolean apply(Game game, Ability source) { PlayerLostLifeWatcher watcher = game.getState().getWatcher(PlayerLostLifeWatcher.class); PlayerList playerList = game.getState().getPlayerList().copy(); Player currentPlayer; UUID sourcePlayerId = source.getControllerId(); Player firstPlayer; if (playerList == null) { return false; } firstPlayer = playerList.getCurrent(game); currentPlayer = playerList.getNext(game); while (watcher != null && currentPlayer != null) { if (!Objects.equals(currentPlayer.getId(), sourcePlayerId) && watcher.getLifeLost(currentPlayer.getId()) > 0) { return true; } if (Objects.equals(currentPlayer, firstPlayer)) { return false; } currentPlayer = playerList.getNext(game); } return false; }
Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { PlayerList playerList = game.getPlayerList().copy(); playerList.setCurrent(controller.getId()); Player winner = game.getPlayer(controller.getId()); game.informPlayers(winner.getLogName() + " has bet " + highBid + " lifes"); Player currentPlayer = playerList.getNextInRange(controller, game); while (!Objects.equals(currentPlayer, winner)) { String text = winner.getLogName() + " has bet " + highBid + " life" + (highBid > 1 ? "s" : "") + ". Top the bid?"; currentPlayer = playerList.getNextInRange(controller, game);
Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { if (game.getState().getPlayersInRange(controller.getId(), game).contains(event.getPlayerId())) { String allowedDirection = (String) game.getState().getValue(source.getSourceId() + "_modeChoice"); if (allowedDirection != null) { PlayerList playerList = game.getState().getPlayerList(event.getPlayerId()); if (allowedDirection.equals(MysticBarrier.ALLOW_ATTACKING_LEFT)) { if (!playerList.getNext().equals(defender.getId())) { if (!playerList.getPrevious().equals(defender.getId())) {
public boolean attackedLastTurn(UUID playerId, UUID otherPlayerId) { if (playersAttackedInLastTurn.get(playerId) != null) { return playersAttackedInLastTurn.get(playerId).contains(otherPlayerId); } return false; } }
@Override public void restoreState(int bookmark, String context) { if (!simulation && !this.hasEnded()) { // if player left or game is over no undo is possible - this could lead to wrong winner if (bookmark != 0) { if (!savedStates.contains(bookmark - 1)) { if (!savedStates.isEmpty()) { // empty if rollback to a turn was requested before, otherwise unclear why logger.error("It was not possible to do the requested undo operation (bookmark " + (bookmark - 1) + " does not exist) context: " + context); logger.info("Saved states: " + savedStates.toString()); } } else { int stateNum = savedStates.get(bookmark - 1); removeBookmark(bookmark); GameState restore = gameStates.rollback(stateNum); if (restore != null) { state.restore(restore); playerList.setCurrent(state.getPlayerByOrderId()); } } } } }
/** * Returns a list of all active players of the game, setting the playerId to * the current player of the list. * * @param playerId * @return playerList */ public PlayerList getPlayerList(UUID playerId) { PlayerList newPlayerList = new PlayerList(); for (Player player : players.values()) { if (!player.hasLeft() && !player.hasLost()) { newPlayerList.add(player.getId()); } } newPlayerList.setCurrent(playerId); return newPlayerList; }
if (controller != null) { PlayerList playerList = game.getPlayerList(); playerList.setCurrent(game.getActivePlayerId()); Player player = game.getPlayer(game.getActivePlayerId()); Player activePlayer = player; player.moveCardToLibraryWithInfo(permanent, source.getSourceId(), game, Zone.BATTLEFIELD, false, false); player = playerList.getNext(game); } while (player != null && !player.getId().equals(game.getActivePlayerId()) && activePlayer.canRespond()); return true;
protected int simulateCounterAttack(Game game, SimulationNode node, int alpha, int beta) { if (Thread.interrupted()) { Thread.currentThread().interrupt(); logger.debug(indent(node.depth) + "interrupted"); return GameStateEvaluator.evaluate(playerId, game); } Integer val = null; if (!game.checkIfGameIsOver()) { logger.debug(indent(node.depth) + "simulating -- ending turn"); simulateToEnd(game); game.getState().setActivePlayerId(game.getState().getPlayerList(game.getActivePlayerId()).getNext()); logger.debug(indent(node.depth) + "simulating -- counter attack for player " + game.getPlayer(game.getActivePlayerId()).getName()); game.getTurn().setPhase(new BeginningPhase()); if (game.getPhase().beginPhase(game, game.getActivePlayerId())) { simulateStep(game, new UntapStep()); simulateStep(game, new UpkeepStep()); simulateStep(game, new DrawStep()); game.getPhase().endPhase(game, game.getActivePlayerId()); } //TODO: calculate opponent actions before combat val = simulateCombat(game, node, alpha, beta, true); if (logger.isDebugEnabled()) logger.debug(indent(node.depth) + "returning -- counter attack score: " + val + " depth:" + node.depth + " for player:" + game.getPlayer(node.getPlayerId()).getName()); } if (val == null) val = GameStateEvaluator.evaluate(playerId, game); return val; }
@Override public boolean apply(Game game, Ability source) { PlayerList players = game.getState().getPlayersInRange(source.getControllerId(), game); int count = players.size(); for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterNonlandPermanent(), source.getControllerId(), source.getSourceId(), game)) { ContinuousEffect effect = new GainControlTargetEffect(Duration.Custom, true, players.get(RandomUtil.nextInt(count))); effect.setTargetPointer(new FixedTarget(permanent.getId())); game.addEffect(effect, source); permanent.untap(game); } return true; }
Player player = playerList.getCurrent(game); while (!exiledCards.isEmpty() && !game.hasEnded()) { if (player != null && player.canRespond()) { player = playerList.getNext(game);
public int getAttackedPlayersCount(UUID playerID) { PlayerList defendersList = playersAttackedThisTurn.getOrDefault(playerID, null); if (defendersList != null) { return defendersList.size(); } return 0; }