Pour un projet informatique, je suis chargé de prendre un jeu Java terminé et d'y ajouter des parties. J'ai décidé de faire mon travail sur le jeu classique Tetris, mais j'ai quelques problèmes. Un problème est que je suis incapable d'imprimer un JLabel sur le plateau de jeu lorsque le jeu atteint un gameOver. Je le fais en utilisant trois programmes différents tous combinés par le paquet, et seulement besoin de deux des trois programmes (je crois) pour y parvenir. En outre, j'ai cherché partout comment placer le son dans Java et je n'ai pas pu trouver quoi que ce soit. Je veux ajouter le thème Tetris au jeu, mais je ne sais pas non plus où l'ajouter.Impression d'un JLabel avec un arrière-plan transparent sur un jeu + ajout de son à l'aide de Swing
Le premier code extrait ici est le programme Tetris.java, ce qui crée le JFrame et tous les JLabels:
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();
}
Le deuxième programme est le programme Board.java, et je vais extraire la méthode Je crois doit être utilisé pour régler le JLabel apparaître:
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);
/////////////////////////////////////////////////////
}
}
Vous pouvez voir mes deux tentatives pour ajouter le gameOver JLabel au JFrame après la fin du match. J'ai aussi essayé de renvoyer un booléen de la méthode nextTetromino() vers le programme principal() de Tetris ainsi que le Tetris(), mais je n'ai pas eu de chance.
La deuxième partie de cette question est où je peux ajouter le thème Tetris de sorte que lorsque le jeu est en cours de lecture, le thème jouera aussi bien. J'ai le fichier MP3 téléchargé et c'est dans le dossier Tetris Source qui est à la maison à tous ces programmes.
Merci à tous!
Mise au point sur une question à la fois, sinon il fait la question trop large pour répondre correctement ou sincintly – MadProgrammer
1) mieux vous aider plus tôt, publiez un [MCVE] ou [Short, Self Contained, Example correct] (http://www.sscce.org/). 2) @MadProgrammer * ".. trop large pour être répondu correctement ou sincèrement" * Je suppose que vous voulez dire "succinctement" mais entièrement d'accord. SO est un site Q & A, pas un service d'assistance ou de tutorat. Chaque fil devrait se concentrer sur ** une ** question spécifique. Cela permet non seulement d'encourager les réponses de personnes qui savent comment résoudre une question mais pas l'autre, mais aussi d'aider les personnes à chercher des réponses plus tard. Ces choses sont aussi plus faciles à déboguer pour le programmeur si elles sont décomposées en parties plus petites. –
@AndrewThompson Je suppose que je veux dire, quelqu'un m'a eu beaucoup trop tôt le matin et je ne devrais pas essayer d'être humain aujourd'hui: P – MadProgrammer