我正在使用Java Swing编写俄罗斯方块。 Game类围绕一个JFrame(框架)旋转,该框架由一个TetrisPanel扩展块所在的JPanel(面板),一个JLabel(pontok)点计数器,一个显示高分的JTextArea(rekord_text)和另一个显示JPanel(kovi)的组件组成。下一个要掉的块。我的想法是,游戏具有3个难度级别,其中方块以不同的速度掉落。
我认为解决此问题的最佳方法是使用上述组件创建一个新的JFrame,但将块的速度设置为不同。我能够关闭旧的JFrame。但是,当新的JFrame打开时,它只是一个空白框架,并且不会响应关闭窗口。
我应该补充说,TetrisPanel正在运行线程,但是我有90%的把握要使用一个易失的布尔值来停止它。
游戏类的构造函数:
this.difSet(nehezseg); //this function sets the falling velocity TetrisPanel.stopped = true; //this static member is the volatile boolean responsible for stopping the thread new_game = false; frame = new JFrame("Tetris_alpha"); frame.setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); panel = new TetrisPanel(); TetrisPanel.stopped = false; new Thread(panel).start(); frame.add(panel, c); pontok = new JLabel ("0"); frame.add(pontok, c); rekord_text = new JTextArea(); //i set up the area frame.add(rekord_text, c); kovi = new NextAktualPanel(); frame.add(kovi, c); menu = new MyMenu(this); frame.setJMenuBar(menu); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { rekordok.add(panel.getPont()); rekordok.write(f); e.getWindow().dispose(); System.exit(0); } } ); frame.pack(); frame.setVisible(true); }
包含游戏循环的Game.start()函数:
public void start() { //game_loop while (!panel.GameOver() && !new_game) { if (panel.aktualLeertDetector()) { panel.addAktualToBlocks(); panel.addNewAktual(next); Elem temp = new Elem(0,0,rand.nextInt(7)); while (temp.getTipus() == next.getTipus()) temp = new Elem(0,0,rand.nextInt(7)); next = temp; kovi.setNextAktual (next); } if (!paused) pontok.setText(Integer.toString(panel.getPont())); kovi.repaint(); panel.repaint(); }
打开新框架的功能:
Public void newGame (Game g) { Game.new_game = true; g.frame.dispose(); Game new_game = new Game("easy"); g = new_game; g.start(); }
以及TetrisPanel的run()函数:
public static volatile boolean stopped = false; @Override public void run() { while (!stopped) { aktual.zuhan(); this.sorTeleAction(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }
将提供任何帮助,包括对不同方法的想法。
我正在使用Java Swing编写俄罗斯方块。 Game类围绕一个JFrame(框架)旋转,该框架由一个TetrisPanel扩展块所在的JPanel(面板),一个JLabel(pontok)点计数器组成,...