如何在不按每次输入的情况下获取输入?

我做了一个简单的游戏(实际上还不是游戏),玩家可以在4×20个字符的房间内移动。 它在控制台中运行。

但是在我的游戏循环中,我希望能够在房间里四处走动,而不是每次想要移动时都按下输入。 玩家应该可以按w / a / s / d并立即更新屏幕,但我不知道该怎么做。

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 wasd\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); } } 

答案很简单

你不能这样做

因为命令行环境不同于swing,因为swing可以处理事件对象这样的事情,而命令行没有事件。

所以,也许现在是离开命令行的最佳时机。