对于计算机科学项目,我负责完成一个完整的Java游戏并添加一些部分。我决定在经典游戏“俄罗斯方块”上做我的工作,但是我遇到了一些问题。其中一个问题是,当游戏遇到gameOver时,我无法在游戏板上打印JLabel。我正在使用三个不同的程序来完成这一切,并且只需要三个程序中的两个(我相信)来实现这一点。另外,我到处搜索如何将声音放入Java中,而且我还找不到任何东西。我想将俄罗斯方块主题添加到游戏中,但我也不知道在哪里添加它。在游戏中打印具有透明背景的JLabel +使用Swing添加声音
这里提取的第一代码是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比赛结束后。我也尝试从下一个Tetromino()方法返回一个布尔值回到Tetris程序的main()以及Tetris(),但是我没有运气。
这个问题的第二部分是我可以添加俄罗斯方块主题的地方,这样当游戏进行时,主题也会发挥作用。我下载了MP3文件,并将其放入所有这些程序的家中的Tetris源文件夹中。
谢谢大家!
上一次在一个疑问焦点,否则使问题过于宽泛正确或sincintly – MadProgrammer
1)回答尽快提供帮助,发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 2)@MadProgrammer *“太宽泛,无法正确回答或缺陷”*我想你的意思是'简洁',但完全同意。 SO是一个问答网站,不是帮助台或辅导服务。每个线程都应该关注**一个**具体问题。这不仅有助于鼓励那些知道如何解决一个问题而不是另一个问题的人的答案,还有助于人们以后寻找答案。如果程序员分解成更小的部分,这些事情也更容易进行调试。 –
@AndrewThompson我想我的意思是,有些人早上起来太早,我不应该在今天尝试人类:P – MadProgrammer