public class Nimm {

	public static void main(String[] args) {

		do {
			playGame();

		} while (decideToContinue());

	}

	static boolean decideToContinue() {
		// Fragen ob weiter spielen
		Out.print("Weiterspielen ? (j | n)");
		char reply = In.readChar();
		while (reply != 'j' && reply != 'n') {
			Out.print("Falsche Eingabe! Weiterspielen ? (j | n)");
		    reply = In.readChar();
		}
		boolean returnVal =  reply == 'j';
		return returnVal;
	}

	static void playGame() {
		// Frage wer beginnen will
		boolean usersTurn = wantBegin();
		int n;
		int coins = 20;

		do {
			// Wenn Benutzer am Zug
			if (usersTurn) {
				// Münzen einlesen
				n = readNrCoins();
			}
			// Wenn Computer am Zug
			else {
				// Münzen bestimmen
				n = computeNrCoins();
			}
			// Münzen wegnehmen
			coins = reduceCoins(coins, n);
			// Stand ausgeben
			printCoins(coins);
			// Spieler wechseln
			usersTurn = ! usersTurn;
		// Solange mehr als eine Münze am Stapel
		} while (coins > 1);


		// Gewinner ausgeben
		if (coins == 1 && usersTurn) {
			Out.println("Die letzte Münze ist für Dich! Juhu, ich habe gewonnen!");
		} else if (coins == 1 && !usersTurn) {
			Out.println("Die letzte Münze für mich! Ok, du hast gewonnen!");
		} else if (coins <= 0 && !usersTurn) {
			Out.println("Du hast die letzte geneommen! Juhu, ich habe gewonnen!");
		} else if (coins == 1 && usersTurn) {
			Out.println("Die letzte Münze habe ich genommen! Ok, du hast gewonnen!");
		}

	}

	static int reduceCoins(int coins, int n) {
		coins = coins - n;
		Out.println(" +++ " + coins);
		return coins;
	}

	static void printCoins(int nr) {
		Out.println("Muenzen am Stapel: " + nr);
	}

	static int readNrCoins() {
		Out.print("Wie viel willst Du nehmen ? 1, 2 oder 3 ?");
		return In.readInt();
	}

	static int computeNrCoins() {
		return 1;
	}

	static boolean wantBegin() {
		Out.print("Beginnen ? (j | n)");
		char reply = In.readChar();
		while (reply != 'j' && reply != 'n') {
			Out.print("Falsche Eingabe! Beginnen ? (j | n)");
		    reply = In.readChar();
		}
		return reply == 'j';
	}

}
