以定时间隔运行循环

7fyelxc5  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(253)

下面是我目前正在运行的代码。我正在尝试制作一个基于文本的街机游戏版本。我希望游戏自动运行,除非用户输入一个方向(wasd)。我研究过计时器,我知道如果我使用swing,我可以实现动作监听器,但是这个项目是在没有gui的情况下严格完成的。我想知道是否有人可能有一些想法,如何使游戏更具活力,而不是转为基础。

while (player1.playerAlive) {
    String directionPrompt = "please enter a direction: \n" + "(W) -   UP\n" + "(S) - DOWN\n" + "(A) - LEFT\n" + "(D) - RIGHT";
    String continueMovingInput;
    continueMovingInput = userMoveInput("To auto move:(Press Enter), to change direction, " + directionPrompt);`

    if (continueMovingInput.equals("") || continueMovingInput.equals("w") || continueMovingInput.equals("a") || continueMovingInput.equals("s") || continueMovingInput.equals("d")) {
        switch (continueMovingInput) {
            case "w":
                player1.moveUp();
                break;
            case "a":
                player1.moveLeft();
                break;
            case "s":
                player1.moveDown();
                break;
            case "d":
                player1.moveRight();
                break;
            default:
                System.out.println("auto move");
                break;
        }

        boolean collision = player1.movePlayer();
        if (!collision) {
            gridArena.gridPlacer(player1.getPlayerX(), player1.getPlayerY(), 1);
            gridArena.gridPrinter();
        } else {
            break;
        }
    } else {
        System.out.println("incorrect selection");
    }
}

编辑:有人建议我同时运行两个线程,一个循环检查输入,然后一个运行主游戏。尽管这样的事情看起来是个好主意,但我不确定如何将输入线程接收到的输入与运行游戏的线程共享。

t2a7ltrp

t2a7ltrp1#

你可以用 Thread.sleep(millis) ,例如:

while(true){
        //do something
        Thread.sleep(1000);
    }
yqkkidmi

yqkkidmi2#

int intervals = 1000;
    do {
        if (System.currentTimeMillis() % intervals == 0) {
            System.out.println("asd");
        }
    } while (true);

我不知道我是否理解你的意思。但也许是像这样的事情?你有无尽的while循环,每一秒都会发生一些事情(在本例中,文本正在显示)。

相关问题