PlayersWorldDominationView.java

package soen6441riskgame.views;

import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;

import soen6441riskgame.models.Continent;
import soen6441riskgame.models.Player;
import soen6441riskgame.singleton.GameBoard;
import soen6441riskgame.utils.ConsolePrinter;

/**
 * Implementation of a “players world domination view” using the Observer pattern. The players world
 * domination view should display
 *
 * 1. the percentage of the map controlled by every player
 *
 * 2. the continents controlled by every player
 *
 * 3. the total number of armies owned by every player
 *
 */
public class PlayersWorldDominationView extends SeparatedView implements Observer {
    public PlayersWorldDominationView() {
        super("Players World Domination");
    }

    /**
     * update the view when property changed
     */
    @Override
    public void update(Observable o, Object arg) {
        clearView();

        ArrayList<Player> players = GameBoard.getInstance().getGameBoardPlayer().getPlayers();

        int totalNumberOfCountries = GameBoard.getInstance().getGameBoardMap().getCountries().size();

        for (Player player : players) {
            double percentConquered = (player.getConqueredCountries().size() * 100) / totalNumberOfCountries;

            ConsolePrinter.printFormat(printStream,
                                       "Player %s conquered %.2f percent of the world, having %d armies",
                                       player.getName(),
                                       percentConquered,
                                       player.getTotalArmies());

            ArrayList<Continent> conqueredContinents = player.getConqueredContinents();
            ConsolePrinter.printFormat(printStream,
                                       "Conquered continents: %d",
                                       conqueredContinents.size());

            for (Continent continent : conqueredContinents) {
                ConsolePrinter.printFormat(printStream,
                                           "    %s",
                                           continent.getName());
            }
        }
    }
}