package tui; import domain.Player; import fassade.KniffelSystem; import java.util.ArrayList; import java.util.Scanner; public class TUI { static KniffelSystem gameSystem; static Scanner sc = new Scanner(System.in); public static void main(String[] args) { System.out.println("Welcome to the PR2 Kniffel game!"); // while (true){ // mainMenuOutput(); // } // DEV: gameSystem = new KniffelSystem(); gameSystem.creteDevPlayers(1); gameLoop(); } private static void mainMenuOutput(){ System.out.println("What do you want to do?"); System.out.println("1 - Play"); System.out.println("2 - See leaderboard"); System.out.println("3 - Exit"); System.out.print("> "); String mainMenuUserInput = sc.nextLine().toLowerCase(); if ((mainMenuUserInput.equals("1")) || (mainMenuUserInput.equals("play"))){ mainMenuPlay(); } else if ((mainMenuUserInput.equals("2")) || (mainMenuUserInput.equals("see leaderboard")) || (mainMenuUserInput.equals("see")) || (mainMenuUserInput.equals("leaderboard"))){ mainMenuLeaderBoard(); } else { mainMenuExit(); } } private static void mainMenuPlay(){ gameSystem = new KniffelSystem(); System.out.println("How many players are you? (1-6)"); System.out.print("> "); String mainMenuPlayAmountPlayersInput = sc.nextLine().toLowerCase(); int amountPlayers = Integer.parseInt(mainMenuPlayAmountPlayersInput); for (int i = 0; i < amountPlayers; i++){ System.out.printf("Player %d: ", i + 1); System.out.println("Enter your name: "); System.out.print("> "); String playerName = sc.nextLine(); String coloredPlayerName = gameSystem.addPlayer(i+1, playerName); System.out.printf("Welcome %s! \n\n", coloredPlayerName); } gameLoop(); System.out.println("GAME END"); //! TEST afterGame(); } private static void gameLoop(){ String[] playerStrings = gameSystem.getAllPlayerStrings(); System.out.println("Participating players:"); for (String player : playerStrings){ System.out.println(player); } System.out.println(); int turncounter = 0; int rollscount; while (true){ if (gameSystem.checkGameEnd()){ return; } rollscount = 0; System.out.printf("It's your turn %s!\n\n", gameSystem.getCurrentPlayer()); ArrayList rolls = new ArrayList(); String keptDice = ""; while(rollscount < 3){ rolls = gameSystem.rollDices(rolls, keptDice); String newRollsString = diceArrToString(rolls); System.out.println(newRollsString); String evaluatedRolls = gameSystem.evaluateRoll(rolls); System.out.println(evaluatedRolls); if (rollscount < 2) { String keeping = gameSystem.changeStringFormat("Which dice do you want to keep?", "\u001B[32m"); System.out.println(keeping); System.out.println("Empty for none, single digit for one dice or (1,3,4) for multiple dice."); System.out.print("> "); keptDice = sc.nextLine(); } rollscount++; } writeToSheet(); triggerNextTurn(); } } private static void writeToSheet(){ ArrayList unusedRows = gameSystem.getUnusedRows(); StringBuilder sb = new StringBuilder(); sb.append("Unused rows: \n"); for (String unusedRow : unusedRows){ sb.append(String.format("- %s \n", unusedRow)); } System.out.println(sb.toString()); String keeping = gameSystem.changeStringFormat("Which row do you want to fill?", "\u001B[31m"); System.out.println(keeping); System.out.print(">"); String sheetInput = sc.nextLine(); gameSystem.writeToSheet(sheetInput); } private static String diceArrToString(ArrayList diceArr){ StringBuilder sb = new StringBuilder(); sb.append("Throwing dice... \n"); sb.append("Your rolls: \n"); for (int i = 0; i < diceArr.size(); i++){ sb.append(String.format("Dice %d: %s \n", i+1, Integer.toString(diceArr.get(i)))); } return sb.toString(); } private static void triggerNextTurn(){ gameSystem.nextPlayer(); } private static void afterGame(){ //TODO sheet berechnen, gewinner entscheiden } private static void mainMenuLeaderBoard(){ gameSystem = new KniffelSystem(); // Scorboard System System.out.println(gameSystem.LeaderBaordData()); // TODO } private static void mainMenuExit(){ System.out.println("Do you really want to exit? (Y/n)"); System.out.print("> "); String mainMenuExitUserInput = sc.nextLine().toLowerCase(); if ((mainMenuExitUserInput.equals("y")) || (mainMenuExitUserInput.equals("yes")) || mainMenuExitUserInput.isBlank()){ System.out.print("Exiting, see you next time!"); System.exit(0); } else { System.out.println("Returning to main menu"); System.out.println(); mainMenuOutput(); } } }