You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

144 lines
3.7 KiB

  1. package Application;
  2. import Game.Game;
  3. import Game.Tictactoe;
  4. import java.util.ArrayList;
  5. import java.util.Scanner;
  6. public class App {
  7. private boolean isRunning = false;
  8. private Cli cli;
  9. private boolean inMenu = true;
  10. private MenuManager menuManager;
  11. private Game currentGame;
  12. public App(Cli cli) {
  13. this.cli = cli;
  14. init();
  15. }
  16. private void init() {
  17. menuManager = initMenuManager();
  18. goToMenu();
  19. }
  20. public void start() {
  21. isRunning = true;
  22. while (isRunning) {
  23. String input = cli.getScanner().nextLine();
  24. if (input.equals("exit")) {
  25. stop();
  26. return;
  27. } else {
  28. if (inMenu) {
  29. cli.clearConsole();
  30. selectMenuItem(input);
  31. } else {
  32. if (input.equals("q")) {
  33. goToMenu();
  34. continue;
  35. }
  36. cli.clearConsole();
  37. currentGame.update(input);
  38. currentGame.print(cli);
  39. }
  40. }
  41. }
  42. }
  43. public void stop() {
  44. isRunning = false;
  45. cli.getPrintStream().println("Stopping application...");
  46. }
  47. public boolean isRunning() {
  48. return isRunning;
  49. }
  50. public Game getCurrentGame() {
  51. return this.currentGame;
  52. }
  53. private MenuManager initMenuManager() {
  54. MenuManager mm = new MenuManager();
  55. ArrayList<Menu> gameList = new ArrayList<>();
  56. gameList.add(new Menu("Tic Tac Toe"));
  57. Menu gameMenu = new Menu("Games");
  58. gameMenu.addMenu(new Menu("Back"));
  59. for (Menu game : gameList) {
  60. game.addMenu(new Menu("Back"));
  61. gameMenu.addMenu(game);
  62. }
  63. mm.addMenu(gameMenu);
  64. return mm;
  65. }
  66. protected void selectMenuItem(String input) {
  67. Scanner scanner = new Scanner(input);
  68. if (input.equals("q") && !menuManager.inRootMenu()) {
  69. goToMenu();
  70. }
  71. if (scanner.hasNextInt()) {
  72. int index = scanner.nextInt() - 1;
  73. menuManager.select(index);
  74. if (menuManager.getCurrentMenu() != null) {
  75. switch (menuManager.getCurrentMenu().getName()) {
  76. case "Back":
  77. try {
  78. menuManager.back();
  79. menuManager.back();
  80. } catch (Exception e) {
  81. e.printStackTrace();
  82. }
  83. break;
  84. case "Tic Tac Toe":
  85. setCurrentGame(new Tictactoe());
  86. return;
  87. default:
  88. break;
  89. }
  90. }
  91. }
  92. printMenu();
  93. }
  94. private void setCurrentGame(Game game) {
  95. inMenu = false;
  96. currentGame = game;
  97. cli.clearConsole();
  98. currentGame.print(cli);
  99. }
  100. private void goToMenu() {
  101. inMenu = true;
  102. currentGame = null;
  103. while (!menuManager.inRootMenu()) {
  104. try {
  105. menuManager.back();
  106. } catch (Exception e) {
  107. e.printStackTrace();
  108. }
  109. }
  110. printMenu();
  111. }
  112. private void printMenu() {
  113. cli.clearConsole();
  114. cli.getPrintStream().println("Welcome to the Cli Arcade Service!");
  115. cli.getPrintStream().println("Type 'exit' at any time to stop the application");
  116. cli.getPrintStream().println("Select a item by typing the number next to it");
  117. cli.getPrintStream().print(menuManager.getFormattedMenuList());
  118. }
  119. }