122 lines
4.2 KiB
Java
122 lines
4.2 KiB
Java
package ch.zhaw.pm2.racetrack;
|
|
|
|
import org.beryx.textio.TextIO;
|
|
import org.beryx.textio.TextIoFactory;
|
|
import org.beryx.textio.TextTerminal;
|
|
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Class representing the Userinterface.
|
|
* Used to get inputs from users via textio.
|
|
*
|
|
* @author Roman Schenk
|
|
*/
|
|
public class UserInterface {
|
|
|
|
private final TextIO textIO;
|
|
private final TextTerminal<?> textTerminal;
|
|
|
|
/**
|
|
* Opens a new Terminal Window and prints the welcome Text.
|
|
*
|
|
* @param welcomeText The Text which will be printed after the windows is opened.
|
|
*/
|
|
public UserInterface(String welcomeText) {
|
|
textIO = TextIoFactory.getTextIO();
|
|
textTerminal = textIO.getTextTerminal();
|
|
|
|
textTerminal.println(welcomeText + "\n");
|
|
}
|
|
|
|
/**
|
|
* Prints the given Text in textTerminal
|
|
*
|
|
* @param text The Text which should be printed.
|
|
*/
|
|
public void printInformation(String text) {
|
|
textTerminal.println(text);
|
|
}
|
|
|
|
/**
|
|
* Method which asks the user to choose one of the options given.
|
|
*
|
|
* @param text Text which is printed before the options are printed. Example: "Select Track file:"
|
|
* @param options List with the options which can be selected.
|
|
* @return the list index of the selected option
|
|
*/
|
|
public int selectOption(String text, List<String> options) {
|
|
textTerminal.println(text + ":");
|
|
for (int option = 0; option < options.size(); option++) {
|
|
textTerminal.println(" " + (option + 1) + ": " + options.get(option));
|
|
}
|
|
return textIO.newIntInputReader().withMinVal(1).withMaxVal(options.size()).read("Enter your choice: ") - 1;
|
|
}
|
|
|
|
/**
|
|
* Gives information which player is at turn and asks for the direction to accelerate or quit the game.
|
|
*
|
|
* @param playingCarIndex the index of the player
|
|
* @param playingCarID the ID of the player
|
|
* @return the direction which is selected by the player. If null -> quit game
|
|
*/
|
|
public PositionVector.Direction selectDirection(int playingCarIndex, char playingCarID) {
|
|
PositionVector.Direction direction = null;
|
|
textTerminal.println("Playing Car " + playingCarIndex + ": " + playingCarID);
|
|
textTerminal.println("Directions are based on the number pad:");
|
|
textTerminal.println("7 8 9 7=up-left, 8=up, 9=up-right");
|
|
textTerminal.println("4 5 6 4=left, 5=no acceleration, 6=right");
|
|
textTerminal.println("1 2 3 1=down-left, 2=down, 3=down-right");
|
|
textTerminal.println("\n10 = quit \n");
|
|
|
|
while (direction == null) { //asks until a valid input in entered
|
|
int number = textIO.newIntInputReader().withMinVal(1).withMaxVal(10).read("choose your Acceleration direction: ");
|
|
if (number == 10) { //quit game
|
|
return null;
|
|
}
|
|
direction = getDirection(number);
|
|
}
|
|
return direction;
|
|
}
|
|
|
|
/**
|
|
* Method which returns the associated direction Object.
|
|
*
|
|
* @param number the number which was typed by the user
|
|
* @return the associated direction. If null -> unknown number
|
|
*/
|
|
private PositionVector.Direction getDirection(int number) {
|
|
return switch (number) {
|
|
case 1 -> PositionVector.Direction.DOWN_LEFT;
|
|
case 2 -> PositionVector.Direction.DOWN;
|
|
case 3 -> PositionVector.Direction.DOWN_RIGHT;
|
|
case 4 -> PositionVector.Direction.LEFT;
|
|
case 5 -> PositionVector.Direction.NONE;
|
|
case 6 -> PositionVector.Direction.RIGHT;
|
|
case 7 -> PositionVector.Direction.UP_LEFT;
|
|
case 8 -> PositionVector.Direction.UP;
|
|
case 9 -> PositionVector.Direction.UP_RIGHT;
|
|
default -> null;
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Method to print the given Track in the terminal
|
|
*
|
|
* @param track the track which should be printed
|
|
*/
|
|
public void printTrack(Track track) {
|
|
textTerminal.println(track.toString());
|
|
}
|
|
|
|
/**
|
|
* Method to dispose of the Textterminal
|
|
*
|
|
* @param text Output Text
|
|
*/
|
|
public void quit(String text) {
|
|
textIO.newStringInputReader().withMinLength(0).read(text);
|
|
textTerminal.dispose();
|
|
}
|
|
}
|