¿Cómo obtener entrada sin presionar entrar cada vez?

Hice un juego simple (bueno, no es realmente un juego todavía) en el que el jugador pueda moverse en una sala de 4x20 caracteres de tamaño. Se ejecuta en consola.

Pero en mi bucle de juego quiero poder moverme en la sala sin presionar entrar cada vez que quiero moverme. El jugador debería poder presionar w / a / s / d y actualizar la pantalla al instante, pero no sé cómo hacerlo.

public class Main{
public static void main(String[] args){
    MovementLoop();
}
public static void MovementLoop(){

    Scanner input = new Scanner(System.in);

    int pos=10, linepos=2;
    String keypressed;
    boolean playing = true;

    while(playing == true){
        display dObj = new display(linepos, pos);
        dObj.drawImage();
        keypressed=input.nextLine();
        if(keypressed.equals("w")){
            linepos -= 1;
        }
        else if(keypressed.equals("s")){
            linepos += 1;
        }
        else if(keypressed.equals("a")){
            pos -= 1;
        }
        else if(keypressed.equals("d")){
            pos += 1;
        }
        else if(keypressed.equals("q")){
            System.out.println("You have quit the game.");
            playing = false;
        }
        else{
            System.out.println("\nplease use w a s d\n");
        }
    }
}
}

public class display{

private String lines[][] = new String[4][20];
private String hWalls = "+--------------------+";
private String vWalls = "|";
private int linepos, pos;


public display(int linepos1, int pos1){
    pos = pos1 - 1;
    linepos = linepos1 - 1;
}
public void drawImage(){

    for(int x1=0;x1<lines.length;x1++){
        for(int x2=0;x2<lines[x1].length;x2++){
            lines[x1][x2]="#";
        }
    }
    lines[linepos][pos]="O";

    System.out.println(hWalls);
    for(int x2=0;x2<lines.length;x2++){
        System.out.print(vWalls);
        for(int x3=0;x3<lines[x2].length;x3++){
        System.out.print(lines[x2][x3]);
        }
        System.out.println(vWalls);
    }
    System.out.println(hWalls);
}
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta