/** * Find player by name. * * @param game * @param name * @return */ private static Optional<Player> findPlayer(Game game, String name) { for (Player player : game.getPlayers().values()) { if (player.getName().equals(name)) { return Optional.of(player); } } return Optional.empty(); }
protected void logLife(Game game) { StringBuilder sb = new StringBuilder(); sb.append(game.getTurn().getValue(game.getTurnNum())); for (Player player: game.getPlayers().values()) { sb.append("[player ").append(player.getName()).append(':').append(player.getLife()).append(']'); } logger.info(sb.toString()); }
@Override public boolean apply(Game game, Ability source) { Players players = game.getPlayers(); for (Player player : players.values()) { if (!player.getId().equals(source.getControllerId())) { player.loseLife(1, game, false); } } return true; }
public GameController(Game game, ConcurrentHashMap<UUID, UUID> userPlayerMap, UUID tableId, UUID choosingPlayerId, GameOptions gameOptions) { gameSessionId = UUID.randomUUID(); this.userPlayerMap = userPlayerMap; chatId = ChatManager.instance.createChatSession("Game " + game.getId()); this.userReqestingRollback = null; this.game = game; this.game.setSaveGame(ConfigSettings.instance.isSaveGameActivated()); this.tableId = tableId; this.choosingPlayerId = choosingPlayerId; this.gameOptions = gameOptions; useTimeout = game.getPlayers().values().stream().allMatch(Player::isHuman); init(); }
private void logStartOfTurn(Game game, Player player) { StringBuilder sb = new StringBuilder(game.getState().isExtraTurn() ? "Extra turn" : "Turn "); sb.append(game.getState().getTurnNum()).append(' '); sb.append(player.getLogName()); sb.append(" ("); int delimiter = game.getPlayers().size() - 1; for (Player gamePlayer : game.getPlayers().values()) { sb.append(gamePlayer.getLife()); int poison = gamePlayer.getCounters().getCount(CounterType.POISON); if (poison > 0) { sb.append("[P:").append(poison).append(']'); } if (delimiter > 0) { sb.append(" - "); delimiter--; } } sb.append(')'); game.fireStatusEvent(sb.toString(), true); } }
@Override public boolean applies(Permanent permanent, Ability source, Game game) { if (permanent.getId().equals(source.getSourceId())) { for (Player player : game.getPlayers().values()) { if (player != null && player.getHand().isEmpty()) { return false; } } return true; } // don't apply for all other creatures! return false; }
protected boolean allPassed(Game game) { for (Player player: game.getPlayers().values()) { if (!player.isPassed() && !player.hasLost() && !player.hasLeft()) return false; } return true; }
protected void processWatchedHands(UUID userId, GameView gameView) { Map<String, SimpleCardsView> handCards = new HashMap<>(); for (Player player : game.getPlayers().values()) { if (player.hasUserPermissionToSeeHand(userId)) { handCards.put(player.getName(), new SimpleCardsView(player.getHand().getCards(game), true)); gameView.setWatchedHands(handCards); } } }
private boolean allJoined() { for (Player player : game.getPlayers().values()) { if (!player.hasLeft()) { Optional<User> user = getUserByPlayerId(player.getId()); if (user.isPresent()) { if (!user.get().isConnected()) { return false; } } if (player.isHuman() && !gameSessions.containsKey(player.getId())) { return false; } } } return true; }
protected boolean allPassed(Game game) { for (Player player : game.getPlayers().values()) { if (!player.isPassed() && !player.hasLost() && !player.hasLeft()) { return false; } } return true; }
public int simulate(UUID playerId) { // long startTime = System.nanoTime(); Game sim = createSimulation(game, playerId); sim.resume(); // long duration = System.nanoTime() - startTime; int retVal = -1; //anything other than a win is a loss for (Player simPlayer: sim.getPlayers().values()) { // logger.info(simPlayer.getName() + " calculated " + ((SimulatedPlayerMCTS)simPlayer).getActionCount() + " actions in " + duration/1000000000.0 + "s"); if (simPlayer.getId().equals(playerId) && simPlayer.hasWon()) { // logger.info("AI won the simulation"); retVal = 1; } } return retVal; }
@Override public boolean apply(Game game, Ability source) { for (UUID playerId : game.getPlayers().keySet()) { Player player = game.getPlayer(playerId); if (player != null) { player.damage((Integer) this.getValue("damage"), source.getSourceId(), game, false, true); } } return true; }
@Override public boolean apply(Game game, Ability source) { int lowestLife = game.getPlayer(source.getControllerId()).getLife(); for (Player playerid : game.getPlayers().values()) { if (playerid != null) { if (lowestLife > playerid.getLife()) { lowestLife = playerid.getLife(); } } } for (Player playerId : game.getPlayers().values()) { if (playerId != null) { playerId.setLife(lowestLife, game, source); } } return true; }
protected int simulatePostCombatMain(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); } logger.debug(indent(node.depth) + "simulating -- post combat main"); game.getTurn().setPhase(new PostCombatMainPhase()); if (game.getPhase().beginPhase(game, game.getActivePlayerId())) { game.getPhase().setStep(new PostCombatMainStep()); game.getStep().beginStep(game, playerId); game.getPlayers().resetPassed(); return addActions(node, alpha, beta); } return simulateCounterAttack(game, node, alpha, beta); }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Set<Card> creatureCards = new LinkedHashSet<>(); for (Player player : game.getPlayers().values()) { for (Card card : player.getGraveyard().getCards(game)) { if (card.isCreature()) { creatureCards.add(card); game.addEffect(new GrimoireOfTheDeadEffect2(card.getId()), source); } } } controller.moveCards(creatureCards, Zone.BATTLEFIELD, source, game, false, false, false, null); return true; } return false; }
@Override public boolean triggerAbility(TriggeredAbility source, Game game) { Ability ability = source.copy(); List<Ability> options = getPlayableOptions(ability, game); if (options.isEmpty()) { if (logger.isDebugEnabled()) logger.debug("simulating -- triggered ability:" + ability); game.getStack().push(new StackAbility(ability, playerId)); if (ability.activate(game, false) && ability.isUsesStack()) { game.fireEvent(new GameEvent(GameEvent.EventType.TRIGGERED_ABILITY, ability.getId(), ability.getSourceId(), ability.getControllerId())); } game.applyEffects(); game.getPlayers().resetPassed(); } else { SimulationNode parent = (SimulationNode) game.getCustomData(); if (parent.getDepth() == maxDepth) return true; logger.debug(indent(parent.getDepth()) + "simulating -- triggered ability - adding children:" + options.size()); for (Ability option: options) { addAbilityNode(parent, option, game); } } return true; }
@Override public boolean apply(Game game, Ability source) { for(Player player : game.getPlayers().values()) { FilterCreaturePermanent filter = new FilterCreaturePermanent(); filter.add(new ControllerIdPredicate(player.getId())); filter.add(new ColorPredicate(ObjectColor.WHITE)); if(game.getBattlefield().count(filter, source.getSourceId(), source.getControllerId(), game) > 0) { player.damage(2, source.getSourceId(), game, false, true); } } return true; } }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller == null) { return false; } for (Player player : game.getPlayers().values()) { if (player != null && controller.hasOpponent(player.getId(), game)) { Effect effect = new CreateTokenTargetEffect(new ZombieToken(), 5); effect.setTargetPointer(new FixedTarget(player.getId(), game)); effect.apply(game, source); } } return true; } }
@Override public boolean apply(Game game, Ability source) { Permanent sourceCard = game.getPermanentOrLKIBattlefield(source.getSourceId()); if (sourceCard == null) { return false; } for (Player player : game.getPlayers().values()) { if (player.getLibrary().hasCards()) { Card card = player.getLibrary().getFromTop(game); if (card != null) { player.revealCards(source, ": Revealed by " + player.getName(), new CardsImpl(card), game); player.loseLife(card.getConvertedManaCost(), game, false); player.moveCards(card, Zone.HAND, source, game); } } } return true; } }
@Override public boolean apply(Game game, Ability source) { boolean result = false; switch (game.getState().getZone(source.getSourceId())) { case BATTLEFIELD: Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { result |= permanent.moveToZone(Zone.LIBRARY, source.getSourceId(), game, onTop); } case GRAVEYARD: Card card = game.getCard(source.getSourceId()); if (card != null) { for (Player player : game.getPlayers().values()) { if (player.getGraveyard().contains(card.getId())) { player.getGraveyard().remove(card); result |= card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, onTop); } } } } return result; }