Nick Stolbov
3 years ago
4 changed files with 210 additions and 7 deletions
-
144src/main/java/Application/App.java
-
10src/main/java/Application/Cli.java
-
10src/main/java/Main.java
-
53src/test/java/Application/AppTest.java
@ -0,0 +1,144 @@ |
|||
package Application; |
|||
|
|||
import Game.Game; |
|||
import Game.Tictactoe; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.Scanner; |
|||
|
|||
public class App { |
|||
|
|||
private boolean isRunning = false; |
|||
private Cli cli; |
|||
|
|||
private boolean inMenu = true; |
|||
private MenuManager menuManager; |
|||
|
|||
private Game currentGame; |
|||
|
|||
public App(Cli cli) { |
|||
this.cli = cli; |
|||
init(); |
|||
} |
|||
|
|||
private void init() { |
|||
menuManager = initMenuManager(); |
|||
|
|||
goToMenu(); |
|||
} |
|||
|
|||
public void start() { |
|||
isRunning = true; |
|||
while (isRunning) { |
|||
String input = cli.getScanner().nextLine(); |
|||
if (input.equals("exit")) { |
|||
stop(); |
|||
return; |
|||
} else { |
|||
if (inMenu) { |
|||
cli.clearConsole(); |
|||
selectMenuItem(input); |
|||
} else { |
|||
if (input.equals("q")) { |
|||
goToMenu(); |
|||
continue; |
|||
} |
|||
cli.clearConsole(); |
|||
currentGame.update(input); |
|||
currentGame.print(cli); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
public void stop() { |
|||
isRunning = false; |
|||
cli.getPrintStream().println("Stopping application..."); |
|||
} |
|||
|
|||
public boolean isRunning() { |
|||
return isRunning; |
|||
} |
|||
|
|||
public Game getCurrentGame() { |
|||
return this.currentGame; |
|||
} |
|||
|
|||
private MenuManager initMenuManager() { |
|||
MenuManager mm = new MenuManager(); |
|||
ArrayList<Menu> gameList = new ArrayList<>(); |
|||
|
|||
gameList.add(new Menu("Tic Tac Toe")); |
|||
|
|||
Menu gameMenu = new Menu("Games"); |
|||
|
|||
gameMenu.addMenu(new Menu("Back")); |
|||
for (Menu game : gameList) { |
|||
game.addMenu(new Menu("Back")); |
|||
gameMenu.addMenu(game); |
|||
} |
|||
mm.addMenu(gameMenu); |
|||
|
|||
return mm; |
|||
} |
|||
|
|||
protected void selectMenuItem(String input) { |
|||
Scanner scanner = new Scanner(input); |
|||
|
|||
if (input.equals("q") && !menuManager.inRootMenu()) { |
|||
goToMenu(); |
|||
} |
|||
|
|||
if (scanner.hasNextInt()) { |
|||
int index = scanner.nextInt() - 1; |
|||
menuManager.select(index); |
|||
if (menuManager.getCurrentMenu() != null) { |
|||
switch (menuManager.getCurrentMenu().getName()) { |
|||
case "Back": |
|||
try { |
|||
menuManager.back(); |
|||
menuManager.back(); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
break; |
|||
case "Tic Tac Toe": |
|||
setCurrentGame(new Tictactoe()); |
|||
return; |
|||
default: |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
printMenu(); |
|||
} |
|||
|
|||
private void setCurrentGame(Game game) { |
|||
inMenu = false; |
|||
currentGame = game; |
|||
cli.clearConsole(); |
|||
currentGame.print(cli); |
|||
} |
|||
|
|||
private void goToMenu() { |
|||
inMenu = true; |
|||
currentGame = null; |
|||
while (!menuManager.inRootMenu()) { |
|||
try { |
|||
menuManager.back(); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
printMenu(); |
|||
} |
|||
|
|||
private void printMenu() { |
|||
cli.clearConsole(); |
|||
cli.getPrintStream().println("Welcome to the Cli Arcade Service!"); |
|||
cli.getPrintStream().println("Type 'exit' at any time to stop the application"); |
|||
cli.getPrintStream().println("Select a item by typing the number next to it"); |
|||
|
|||
cli.getPrintStream().print(menuManager.getFormattedMenuList()); |
|||
} |
|||
} |
@ -0,0 +1,53 @@ |
|||
package Application; |
|||
|
|||
import org.junit.jupiter.api.AfterEach; |
|||
import org.junit.jupiter.api.BeforeEach; |
|||
import org.junit.jupiter.api.Test; |
|||
|
|||
import java.io.ByteArrayInputStream; |
|||
import java.io.ByteArrayOutputStream; |
|||
import java.io.PrintStream; |
|||
|
|||
import static org.junit.jupiter.api.Assertions.*; |
|||
|
|||
class AppTest { |
|||
|
|||
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); |
|||
private final ByteArrayInputStream inContent = new ByteArrayInputStream("1\n2\nexit\n".getBytes()); |
|||
|
|||
App app; |
|||
Cli cli; |
|||
|
|||
@BeforeEach |
|||
void setUp() { |
|||
cli = new Cli(new PrintStream(outContent), inContent); |
|||
cli.setClearConsoleActive(false); |
|||
app = new App(cli); |
|||
} |
|||
|
|||
@AfterEach |
|||
void tearDown() { |
|||
} |
|||
|
|||
//inContent has the 'q' at the end, to terminated the loop and set isRunning to false |
|||
@Test |
|||
void stop() { |
|||
ByteArrayInputStream input = new ByteArrayInputStream("1\n2\nexit\n".getBytes()); |
|||
cli = new Cli(new PrintStream(outContent), input); |
|||
cli.setClearConsoleActive(false); |
|||
app = new App(cli); |
|||
app.start(); |
|||
assertFalse(app.isRunning()); |
|||
} |
|||
|
|||
@Test |
|||
void selectMenuItem() { |
|||
assertNull(app.getCurrentGame()); |
|||
app.selectMenuItem("1"); |
|||
assertNull(app.getCurrentGame()); |
|||
app.selectMenuItem("2"); |
|||
assertNotNull(app.getCurrentGame()); |
|||
app.selectMenuItem("q"); |
|||
assertNull(app.getCurrentGame()); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue