package tui; import domain.Sheet; import domain.sheets.*; import fassade.KniffelSystem; import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; import java.util.Set; 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.createTestPlayers(6); gameLoop(); } private static int 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(); System.out.println("play"); // TEST return 1; } else if ((mainMenuUserInput.equals("2")) || (mainMenuUserInput.equals("see leaderboard")) || (mainMenuUserInput.equals("see")) || (mainMenuUserInput.equals("leaderboard"))){ System.out.println("leaderboard"); // TEST mainMenuLeaderBoard(); return 2; } else { System.out.println("exit"); // TEST mainMenuExit(); return 3; } } 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(); } 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){ rollscount = 0; // System.out.printf("Turn Nr.%d\n", turncounter); System.out.printf("It's your turn %s!\n\n", gameSystem.getCurrentPlayer()); ArrayList rolls = new ArrayList(); String keptDice = ""; while(rollscount < 3){ System.out.printf("Roll Nr. %d \n", rollscount); // TEST System.out.printf("Kept dice: %s \n\n", keptDice); // TEST rolls = gameSystem.rollDices(rolls, keptDice); String newRollsString = diceArrToString(rolls); System.out.println(newRollsString); evaluateRoll(rolls); System.out.println("Which dice do you want to keep?"); 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++; } turncounter = triggerNextTurn(turncounter); } } private static String evaluateRoll(ArrayList rolls){ HashMap possibleCombinations = createCategorieHashMap(); ArrayList validCombinations = new ArrayList<>(); //TODO Add starwars logic for (int dice : rolls){ switch (dice){ case 1: possibleCombinations.get("Aces").addAmount(); break; case 2: possibleCombinations.get("Twos").addAmount(); break; case 3: possibleCombinations.get("Threes").addAmount(); break; case 4: possibleCombinations.get("Fours").addAmount(); break; case 5: possibleCombinations.get("Fives").addAmount(); break; case 6: possibleCombinations.get("Sixes").addAmount(); break; } } StringBuilder sb = new StringBuilder(); sb.append("Possible combinations: \n"); Set keys = possibleCombinations.keySet(); for (String key : keys) { Category keyObj = possibleCombinations.get(key); int keyAmount = keyObj.getAmount(); int keyValue = keyObj.getValue(); if (keyAmount != 0){ validCombinations.add(keyObj); sb.append(String.format("%s: Amount: %d, Value: %d \n",key, keyAmount, keyValue)); } } System.out.println(sb.toString()); for(Category categorie : validCombinations){ if (categorie.getAmount() == 3){ } } return "TODO"; } private static HashMap createCategorieHashMap(){ // TODO starwars sheet implementieren Sheet sheet = new Sheet(); return sheet.getAllCategories(); } private static String diceArrToString(ArrayList diceArr){ StringBuilder sb = new StringBuilder(); 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 int triggerNextTurn(int turnCounter){ turnCounter++; System.out.print("Next turn? \n"); System.out.print("> "); sc.nextLine(); gameSystem.nextPlayer(); return turnCounter; } 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(); } } }