当前位置: 首页 > 知识库问答 >
问题:

While循环接受用户输入(如果有的话),是否自行执行?

宰父嘉胜
2023-03-14

我正在做一个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;
}

共有1个答案

吴举
2023-03-14

下面是一个示例,如果您想在设定的时间范围内轮询来自用户的输入,您可以做一些事情。

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
            }
        }
    }
}
 类似资料:
  • 我正在设置一个,它在用户输入整数之前一直执行。但是,按照我现在的方式,循环在输入整数后再次打印消息,然后程序正常执行。有人能建议一种方法来使输入整数后不再打印该消息吗?谢了!

  • 首先,感谢你阅读我的帖子并帮助我。 我试图编程,我定义了一个随机数,程序猜测这个随机数,然后,根据我说猜测太高或太低,程序再次猜测。 再次感谢!

  • 问题内容: 这里的Python新手非常抱歉,我确定这是一个愚蠢的问题,但是我似乎无法在要求我使用while循环检查有效用户输入的教程中解决以下挑战。 (使用Python2.7) 这是我的代码,但无法正常工作: 上面打印输出到控制台: 这显然是不正确的-循环应该在用户输入“ y”或“ n”时结束,但是我不确定如何执行此操作。我在这里做错了什么? 注意:挑战要求我同时使用运算符和 问题答案: 较短的解

  • 这里的Python新手非常抱歉,我确信这是一个愚蠢的问题,但在一个教程中,我似乎无法解决以下挑战,该教程要求我使用while循环来检查有效的用户输入。 (使用Python2.7) 这是我的代码,但它工作不正常: 上述内容打印到控制台: 这显然是不对的- 注意:挑战要求我同时使用运算符和

  • 我试图通过使用Kryonet进行通信来创建一个基本的IRC。我遇到的问题是,在我的代码中,我不能安全地使用允许用户键入和发送消息的main while循环,因为Scanner给出了一个错误,并且似乎跳过了对nextLine()的调用。我想做的是让扫描仪在继续之前等待用户输入。 更准确地说,程序将首先在行的开头放一个“:”,然后在用户按enter键后获取用户键入的任何内容,然后将其发送到服务器。我得

  • 我试图在PlayerOne类中放入一个while循环,这样就可以通过用户输入来选择玩家的职业。我不知道怎么让它起作用。你能给我一个建议或提示吗?谢谢!(我想你不需要玩家类或者主类,所以我就让他们置身事外)