@Override public void start() { // save the number of characters in the game to a local int variable numCharactersInGame = allCharacters.size(); /*store a local copy of the shared Random instance from the Utils class we will use this to decide who is attacking and who is defending on each turn of the game*/ Random sharedRandomGen = Utils.getSharedRandomGen(); Utils.printSystemMessage( "How many turns to you want to give characters playing the game? \n\tEnter a number."); if (userInputScanner.hasNext()) { userInput = userInputScanner.next(); } // use a try-catch block to catch any errors that occur with user input try { // try to parse the number from the user input string setNumTurns(Integer.parseInt(userInput)); } catch (NumberFormatException e) { // this error block will execute if the user does not enter a number Utils.printSystemMessage("Error! You were supposed to enter a number ..."); // show yourself the error so you can find and fix it during development e.printStackTrace(); Utils.printSystemMessage( "ConsoleGame will startInConsole with " + DEFAULT_NUM_TURNS_TO_TAKE + " turns for the characters to interact."); // but, let the user continue with a default number of turns setNumTurns(1000); } play(numTurnsToTake); }
private void play(int turnsInGame) { if (numTurnsToTake > 0) { Utils.printSystemMessage("Starting the game with."); Utils.printSystemMessage("There will be " + turnsInGame + " turns before the game ends."); Utils.printSystemMessage("These are all the characters in the game"); for (Character character : allCharacters) { System.out.println(character); } System.out.println("\n\n_________________________Lets Start!_________________________\n\n"); int numCharactersLeftInGame = numCharactersInGame; for (int turnsTaken = 0; turnsTaken < turnsInGame; turnsTaken++) { Character attacker = allCharacters.get(sharedRandomGen.nextInt(numCharactersLeftInGame)); Character defender = allCharacters.get(sharedRandomGen.nextInt(numCharactersLeftInGame)); // make sure both are alive if (attacker.isAlive() && defender.isAlive()) { // have the defender heal itself before being attacked int healAmount = sharedRandomGen.nextInt(10) + 1; defender.healSelf(healAmount); // have the attacker attack the defender attacker.attack(defender); // check if the defender died from the attack if (!defender.isAlive()) { Utils.printSystemMessage(defender + " has died. Removing from game."); // if the defender is dead, take it out of the list of characters in the game allCharacters.remove(defender); // update the local value of how many characters are left in the game numCharactersLeftInGame = allCharacters.size(); if (numCharactersLeftInGame < 2) { // if there are no more characters left in the game, // break out of the for loop to end the game Utils.printSystemMessage( "\n\n\n_____________________________________________________________\n"); Utils.printSystemMessage("###Only one character left. \n\tGAMEOVER!*****"); break; } } } } Utils.printSystemMessage( "\n\n\n_____________________________________________________________\n"); Utils.printSystemMessage( String.format("##All %d turns taken. GUIGameApplication Over!", turnsInGame)); // print the champion if there was one if (allCharacters.size() == 1) { Utils.printSystemMessage("\n\n"); Utils.printSystemMessage(allCharacters.get(0) + " is the CHAMPION!!!!"); } else { // otherwise print how many characters survived Utils.printSystemMessage( String.format( "%d of %d characters survived.", numCharactersLeftInGame, numCharactersInGame)); } } else { Utils.printSystemMessage("No characters in the game to play with... \n\tGameOver!"); } }