Merge pull request #18 from PM2-IT21bWIN-ruiz-mach-krea/Class_UserInterface
created Class_UserInterface
This commit is contained in:
		
						commit
						5afd0b0b61
					
				| 
						 | 
				
			
			@ -0,0 +1,94 @@
 | 
			
		|||
package ch.zhaw.pm2.racetrack;
 | 
			
		||||
 | 
			
		||||
import org.beryx.textio.TextIO;
 | 
			
		||||
import org.beryx.textio.TextIoFactory;
 | 
			
		||||
import org.beryx.textio.TextTerminal;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
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");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * asks the user to choose one of the options given.
 | 
			
		||||
     * @param text Text which is printed befor 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 + ":\n");
 | 
			
		||||
        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's turn it is and asks for the direction to accelerate
 | 
			
		||||
     * @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 + ": " + playingCarIndex);
 | 
			
		||||
        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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * returns the 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;
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * prints the given Track in the terminal
 | 
			
		||||
     * @param track the track which should be printed
 | 
			
		||||
     */
 | 
			
		||||
    public void printTrack(Track track) {
 | 
			
		||||
            textTerminal.println(track.toString());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue