protected void play(UUID nextPlayerId) { if (!isPaused() && !checkIfGameIsOver()) { playerList = state.getPlayerList(nextPlayerId); Player playerByOrder = getPlayer(playerList.get()); state.setPlayerByOrderId(playerByOrder.getId()); while (!isPaused() && !checkIfGameIsOver()) { if (!playExtraTurns()) { break; if (checkIfGameIsOver() && !isSimulation()) { winnerId = findWinnersAndLosers(); StringBuilder sb = new StringBuilder("GAME END gameId: ").append(this.getId()).append(' ');
@Override public void setConcedingPlayer(UUID playerId) { Player player = null; if (state.getChoosingPlayerId() != null) { player = getPlayer(state.getChoosingPlayerId()); } else if (state.getPriorityPlayerId() != null) { player = getPlayer(state.getPriorityPlayerId()); } if (player != null) { if (!player.hasLeft() && player.isHuman()) { if (!concedingPlayers.contains(playerId)) { logger.debug("Game over for player Id: " + playerId + " gameId " + getId()); concedingPlayers.add(playerId); player.signalPlayerConcede(); } } else { // no asynchronous action so check directly concedingPlayers.add(playerId); checkConcede(); } } else { checkConcede(); checkIfGameIsOver(); } }
/** * 116.5. Each time a player would get priority, the game first performs all * applicable state-based actions as a single event (see rule 704, * “State-Based Actions”), then repeats this process until no state-based * actions are performed. Then triggered abilities are put on the stack (see * rule 603, “Handling Triggered Abilities”). These steps repeat in order * until no further state-based actions are performed and no abilities * trigger. Then the player who would have received priority does so. * * @return */ @Override public boolean checkStateAndTriggered() { boolean somethingHappened = false; //20091005 - 115.5 while (!isPaused() && !checkIfGameIsOver()) { if (!checkStateBasedActions()) { // nothing happened so check triggers state.handleSimultaneousEvent(this); if (isPaused() || checkIfGameIsOver() || getTurn().isEndTurnRequested() || !checkTriggered()) { break; } } state.handleSimultaneousEvent(this); applyEffects(); // needed e.g if boost effects end and cause creatures to die somethingHappened = true; } checkConcede(); return somethingHappened; }
@Override public void resume() { playerList = state.getPlayerList(state.getActivePlayerId()); Player player = getPlayer(playerList.get()); boolean wasPaused = state.isPaused(); state.resume(); if (!checkIfGameIsOver()) { fireInformEvent("Turn " + state.getTurnNum()); if (checkStopOnTurnOption()) { return; } state.getTurn().resumePlay(this, wasPaused); if (!isPaused() && !checkIfGameIsOver()) { endOfTurn(); player = playerList.getNext(this); state.setTurnNum(state.getTurnNum() + 1); } } play(player.getId()); }
try { applyEffects(); while (!isPaused() && !checkIfGameIsOver() && !this.getTurn().isEndTurnRequested()) { if (!resuming) { state.getPlayers().resetPassed(); while (!isPaused() && !checkIfGameIsOver()) { try { if (bookmark == 0) { while (!player.isPassed() && player.canRespond() && !isPaused() && !checkIfGameIsOver()) { if (!resuming) { if (isPaused() || checkIfGameIsOver()) { return; if (isPaused() || checkIfGameIsOver()) { return;
private boolean playTurn(Player player) { boolean skipTurn = false; do { if (executingRollback) { executingRollback = false; player = getPlayer(state.getActivePlayerId()); for (Player playerObject : getPlayers().values()) { if (playerObject.isInGame()) { playerObject.abortReset(); } } } else { state.setActivePlayerId(player.getId()); saveRollBackGameState(); } if (checkStopOnTurnOption()) { return false; } skipTurn = state.getTurn().play(this, player); } while (executingRollback); if (isPaused() || checkIfGameIsOver()) { return false; } if (!skipTurn) { endOfTurn(); state.setTurnNum(state.getTurnNum() + 1); } return true; }
if (checkIfGameIsOver()) { return;