public void checkTerminationConditions() { foreach (var termination in terminations) { if (termination.isDone(this)) { isEnded = true; var result = new VGDLGameResult(); for (int i = 0; i < no_players; i++) { avatars[i].winState = termination.getWin(i); result.playerAvatars.Add(avatars[i]); result.playerOutcomes.Add(avatars[i].winState); result.playerScores.Add(avatars[i].score); } gameResult = result; fwdModel.update(this); for (int i = 0; i < no_players; i++) { avatars[i].passResult(this); } } //if any condition is met, the game is over, and so we need not test anymore. if (isEnded) { break; } } /* * //NOTE: this is for the AI competition, to stop running a bot that produces too many warnings * if(Logger.getInstance().getMessageCount() > CompetitionParameters.MAX_ALLOWED_WARNINGS){ * System.out.println("Finishing the game due to number of warnings: " + Logger.getInstance().getMessageCount() + * ". Messages will be flushed."); * Logger.getInstance().printMessages(); * isEnded = true; * Logger.getInstance().flushMessages(); * } */ }
/** * Overloaded method for multiplayer games. Same functionality as above. * * @param id * - id of the player that was disqualified */ public void disqualify(int id) { if (gameResult == null) { gameResult = new VGDLGameResult(); } isEnded = true; if (id == -1) { disqualified = true; avatars[0].disqualify(true); gameResult.playerAvatars.Add(avatars[0]); gameResult.playerOutcomes.Add(avatars[0].winState); gameResult.playerScores.Add(avatars[0].score); avatars[0].passResult(this); } else { avatars[id].disqualify(true); for (int i = 0; i < no_players; i++) { gameResult.playerAvatars.Add(avatars[i]); gameResult.playerOutcomes.Add(avatars[i].winState); gameResult.playerScores.Add(avatars[i].score); } for (int i = 0; i < no_players; i++) { avatars[id].passResult(this); } } }