对于计算机科学项目,我的任务是完成一个完整的Java游戏并添加一些部分。我决定在经典游戏俄罗斯方块上做我的工作,但是我遇到了一些问题。一个问题是,当游戏遇到 gameOver 时,我无法在游戏板上打印JLabel。我这样做是使用三个不同的程序,所有程序都由程序包组合而成,只需要三个程序中的两个(我相信)来实现这一点。此外,我到处搜索如何将声音放入Java中,但我找不到任何东西。我想在游戏中添加俄罗斯方块主题,但我也不知道在哪里添加它。
这里提取的第一个代码是Tetris.java程序,它创建了JFrame和所有JLabel:
JLabel gameTitle;
static JLabel gameOver;
static boolean gameIsOver = false;
JLabel gameStatus;
public static void main(String argsp[]) throws Exception
{
Tetris game = new Tetris();
game.setVisible(true);
game.setResizable(false);
game.setSize(400, 900);
game.setTitle("Tetris - myName");
game.setDefaultCloseOperation(EXIT_ON_CLOSE);
game.setLocationRelativeTo(null);
game.getContentPane().setBackground(Color.DARK_GRAY);
while(gameIsOver)
game.add(gameOver, BorderLayout.CENTER);
}
public Tetris() throws Exception
{
URL fontURL = new URL("http://www.WebpagePublicity.com/" + "free-fonts/f/Futura%20Black%20BT.ttf");
Font f = Font.createFont(Font.TRUETYPE_FONT, fontURL.openStream());
GraphicsEnvironment g = GraphicsEnvironment.getLocalGraphicsEnvironment();
g.registerFont(f);
gameTitle = new JLabel("TETRIS", SwingConstants.CENTER);
gameTitle.setForeground(Color.WHITE);
f = f.deriveFont(Font.PLAIN, 80);
gameTitle.setFont(f);
add(gameTitle, BorderLayout.NORTH);
gameOver = new JLabel("GAME OVER", SwingConstants.CENTER);
gameOver.setForeground(Color.RED);
gameOver.setOpaque(true);
f = f.deriveFont(Font.PLAIN, 50);
gameOver.setFont(f);
gameStatus = new JLabel("LINES: 0 - SCORE: 0", SwingConstants.CENTER);
gameStatus.setForeground(Color.WHITE);
f = f.deriveFont(Font.PLAIN, 30);
gameStatus.setFont(f);
add(gameStatus, BorderLayout.SOUTH);
Board b = new Board(this);
add(b);
b.start();
}
第二个程序是Board.java程序,我将提取我认为必须用来设置JLabel的方法:
private void nextTetromino()
{
cP.setRandomTetromino();
cX = bW / 2 + 1;
cY = bH - 1 + cP.minY();
if(!moveTetromino(cP, cX, cY))
{
cP.setTetromino(Tetrominoes.NoShape);
t.stop();
playing = false;
/////////////////////////////////////////////////////
gameOver.add(gameOver, BorderLayout.CENTER);
//Tetris.gameOver.add(gameOver, BorderLayout.CENTER);
/////////////////////////////////////////////////////
}
}
你可以看到我在游戏结束后尝试将gameOver JLabel添加到JFrame。我还试图从nextTetromino()方法发回一个布尔回到俄罗斯方块程序' main()以及俄罗斯方块(),但是我没有运气。
这个问题的第二部分是我可以添加俄罗斯方块主题的地方,以便在玩游戏时,主题也会播放。我已经下载了MP3文件,它在俄罗斯方块源文件夹中,是所有这些程序的所在地。
谢谢大家!
答案 0 :(得分:1)
您无法向BorderLayout.CENTER添加标签。这将取代CENTER中的现有组件。
如果你想要标签"在顶部"其他组件,那么你有几个选择:
使用JLayeredPane。您的游戏将在一个层上播放。然后,您可以在不同的图层上添加JLabel
在框架的glass pane
上显示标签。这是两种方法中比较容易的。
阅读Swing Tutorial,了解这两种方法的示例。有以下部分:
答案 1 :(得分:0)