我想制作一个每1秒循环一次数组的游戏,然后当' x'键被按下阵列停止打印,下一个' x'按键,阵列从当前元素恢复并再次循环。我的游戏以x开头,如果我再次按下,则每1秒打印一次。我如何添加功能并跟踪卡片中的卡片
我的程序是在java框架中
public class Game {
private JFrame frame;
public static String[] cards = { "Jack", "Queen", "King" };
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Menu window = new Menu();
Timer timer = new Timer();
window.frame.setVisible(true);
//timer for card loops
timer.schedule(new GoCards(cards), 0, 1000);
window.frame.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e)
{
char key = e.getKeyChar();
if(key == 'x')
{
//pause the timer and if i press again then resume timer
timer.cancel();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
class GoCards extends TimerTask
{
String[] deck;
public GoCards(String[] cards)
{
deck = cards;
}
public void run()
{
for(int i = 0; i < 3; i++)
{
Thread.sleep(1000);
System.out.println(deck[i]);
}
}
答案 0 :(得分:1)
你的是一个Swing应用程序,所以不,不要使用Thread.sleep(...)
,除非你想冒着整个GUI进入睡眠的风险,并且不要使用java.util.Timer
,因为这与Swing事件线程不兼容。相反,你会想要使用最适合这项工作的工具 - 一个Swing Timer,又名javax.swing.Timer
。可以通过调用start()
来启动Timer,只需调用stop()
即可停止,并在其构造函数中设置延迟(以毫秒为单位)。此外,使用KeyListener是有风险的,因为如果有任何东西(例如JButton)窃取了焦点,它就无法工作。最好使用Key Bindings。您可以在此处找到Swing教程和其他Swing资源的链接:Swing Info。
答案 1 :(得分:0)
您可以使用等待
等计时器Thread.sleep(milliseconds);
然后使用新计数器跟踪每个按键/迭代次数。
检查按键是一个简单的处理它们的问题,或者是任意检查任何特定键的每次迭代。