/* Un oggetto Dado rappresenta un dado a più facce, che generalizza
 * quelli comunemente usati nei giochi da tavolo. */
class Dado {
    /* numero di facce del dado */
    int facce;
    /* risultato dell'ultimo lancio del dado */
    int risultato;
    private static final int DADO_NON_TIRATO = -1;

    /* Crea un nuovo Dado a n facce.
     * Il Dado deve avere almeno due facce. */
    public Dado (int n) {
		if (n<2) {
			throw new CreazioneDadoException(n);
		} else {
			this.facce = n;
			/* -1 = il dado non è mai stato tirato */
			this.risultato = DADO_NON_TIRATO;
		}
	}

	/* Tira questo dado. */
	public void tira() {
		this.risultato = (int) (Math.random()*facce) + 1;
	}

	/* Restituisce il valore riportato sulla faccia in alto di questo dado
	 * l’ultima volta che è stato tirato. */
	public int punteggio() {
		if (risultato == DADO_NON_TIRATO) {
			throw new PunteggioDadoException();
		} else {
			return this.risultato;
		}
	}

}

class CreazioneDadoException extends RuntimeException {
	public CreazioneDadoException(int n) {
		super("Numero di facce: " + n + " non corretto.");
	}
}

class PunteggioDadoException extends RuntimeException {
	public PunteggioDadoException() {
		super("Il dado non è mai stato tirato.");
	}
}
