gpt4 book ai didi

java - while 循环接受用户输入(如果有),否则自行执行?

转载 作者:行者123 更新时间:2023-12-02 04:35:34 25 4
gpt4 key购买 nike

我正在制作一个 while 循环,它将每 1/3 秒左右执行一次(对于贪吃蛇游戏)。如果有输入,我希望循环能够处理扫描仪输入,如果没有用户输入,我希望循环执行一些默认任务(沿最后一个输入方向移动蛇)。

我知道更简单的方法是创建一个带有事件处理程序的 javafx 程序,但是我只是想看看是否可以在个人项目的终端中实现这种游戏。每当我在 while 循环中打开扫描仪时,我都会将一个变量设置为默认值。如果 sc.nextLine() 存在,扫描器将更新此变量。然后我的循环就完成了它的事情。问题是,即使 sc.nextLine() 不存在,无论我如何表述代码,我的循环都会等待输入。

如果我从循环中删除扫描仪,代码将在默认输入的计时器上完美执行,但是一旦我使用扫描仪查找用户输入,它就会暂停。

while(snek.currSnake.gameState){
if(snek.nextTurnTime - System.currentTimeMillis() > 0){
try{
TimeUnit.MILLISECONDS.sleep(snek.nextTurnTime-
System.currentTimeMillis());
}
catch(InterruptedException e){
break;
}
//This section handles how quickly each turn gets executed
}


System.out.println(snek.currSnake); //Print game board to terminal

char charInput = snek.currInput; //Update charInput to some
//default value
if(scanner.hasNext()){
charInput = scanner.nextLine().charAt(0);
}
//If there is user input, update charInput to that


if(charInput == 'w' || charInput == 'a' || charInput == 's'
|| charInput == 'd' || charInput == 'q'){ //If charInput is defined
snek.currInput = charInput;
snek.currSnake.move(charInput); //Move snake and update default value
}
snek.nextTurnTime = System.currentTimeMillis() + TURN_DELAY_VAL;
}

我希望 while 循环能够自行执行,并且如果有下一个用户输入,则运行代码,只是现在不是使用默认输入,而是使用用户输入的输入。

相反,每转一次,while 循环都会暂停,等待 Scanner.nextLine() 为 true,实际上每次都需要用户输入。

我收到错误消息,只是期望的结果和我得到的结果有差距

最佳答案

如果您想在设定的时间范围内轮询用户的输入,您可以执行以下操作的示例。

public static void main(String[] args) throws IOException, InterruptedException {
// wait time of 1/3 a second in milliseconds
long waitTime = (long) ((1.0 / 3.0) * 1000.0);
// standard input buffered reader
try (BufferedReader in = new BufferedReader(new InputStreamReader(System.in))) {
// loop for 100 polls used in testing (replace with game loop here)
for (int i = 0; i < 100; i++) {
// wait for user to input data
Thread.sleep(waitTime);
String s = null;
while (in.ready()) {
// get the last thing the user has input in the 1/3 second
// to protect you from multiple inputs
s = in.readLine();
}
if (s != null) {
// handle user input here
System.out.println("User input: " + s);
} else {
// handle no user input here
}
}
}
}

关于java - while 循环接受用户输入(如果有),否则自行执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56553944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com