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