所以基本上我试图通过编写基于圆形的游戏
来回到Java直到现在你只能按下按钮(x)
开始新一轮if (x.getKeyChar() == 'o') {
TimerRounds.cancel();
// methods to start the next round //
TimerRounds = new Timer();
// Timer Method
Timer Rounds.schedule(new TimerTask() {
public void run() {
System.out.println("Time is over, next round is started");
//methods to start the next round //
//Timer has to start from the beginning again//
//already tried to start the timer here, didn´t work//
}
}, 3000);
让我解释一下代码:如果玩家按下o,则开始新一轮,然后轮到下一个玩家。但是,除此之外,每轮都有一个倒计时,如果倒计时到期,新一轮将自动开始
我设法做了所有事情,但我不明白的是以下问题: 计时器结束,新一轮开始,但我如何管理它自动启动下一轮的新计时器?直到现在它只在按下键时才会这样做,但是我希望它在上一轮的倒计时到期时启动一个新的计时器。
我希望你得到问题,我的英语非常糟糕 得到一些建议会很棒
答案 0 :(得分:1)
你应该分开你的代码的三个问题:你的实际转弯结构,转弯可以结束,新的转弯可以开始,游戏的用户界面,他可以按下按钮,以及游戏的计时逻辑。
在你的回合结构类中,你将有一个startNextTurn
方法取消一个可能的挂起计时器并启动一个新计时器。在您的用户界面类中,您将调用该方法 - 不要在用户界面中执行计时器逻辑,让转弯结构执行此操作。
不是直接使用Timer
,而是将其封装到提供两种方法的类中:cancelTimer
和startTimer
;计时器关闭会调用startNextTurn
。根据您的需要,您甚至可以将它们组合成restartTimer
方法。
在设计这些抽象单元时,请考虑以下问题:什么样的数据和逻辑属于一起?操作必须做什么才能完成?例如,只有在启动定时器时才开始新的转弯,因此需要通过方法封装,并且触发新转弯的两个事件(用户输入和定时器)将重复使用相同的逻辑。
答案 1 :(得分:0)
您可能希望查看Timer
的{{3}}。这将让您安排重复任务