Olá pessoal, é o seguinte, eu jé tentei fazer isso de algumas formas, aprendi a fazer um placar, para o meu jogo Pong. Mas quando a quantidade de pontos dos jogadores “raquete” 1 ou 2 for 12 (doze), eu, através de ImageIO, quero que o jogo passe uma imagem de “Game Over”, coisa assim.
Segue a classe:
package pong;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import javax.swing.Timer;
@SuppressWarnings("serial")
public class Fundo extends JPanel implements ActionListener {
private Image fundo;
private boolean gaming = true;
private Paddleft pad = new Paddleft();
private Paddleright pad2 = new Paddleright();
private Ball Ball = new Ball();
private Timer timer;
public Fundo() throws IOException{
setDoubleBuffered(true);
setFocusable(true);
this.addKeyListener(new Fundo.KeyboardAdapter());
try {
fundo = ImageIO.read(getClass().getResource(
"backg.png"));
} catch (IOException e) {
throw new RuntimeException(
"A imagem de fundo não pode ser carregada!", e);
}
timer = new Timer(5, this);
timer.start();
}
public void padScore(){
while(pad.point < 12){
gaming = true;
}if(pad.point == 12){
gaming = false;
try {
fundo = ImageIO.read(getClass().getResource(
"game_over.png"));
} catch (IOException e) {
throw new RuntimeException(
"A imagem de fundo não pode ser carregada!", e);
}
}
}
public void pad2Score(){
while(pad2.point < 12){
gaming = true;
}if(pad2.point == 12){
gaming = false;
try {
fundo = ImageIO.read(getClass().getResource(
"game_over.png"));
} catch (IOException e) {
throw new RuntimeException(
"A imagem de fundo não pode ser carregada!", e);
}
}
}
@Override
public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(fundo, 0, 0, null);
if(gaming){
g2d.drawImage(pad.getImage(), pad.getX(), pad.getY(), this);
g2d.drawImage(pad2.getImage(), pad2.getX(), pad2.getY(), this);
g2d.drawImage(Ball.getImage(), Ball.getX(), Ball.getY(), this);
g2d.setColor(Color.WHITE);
g2d.drawLine(350, 10, 350, 399);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Font font = new Font("hooge 05_55", Font.BOLD, 24);
g2d.setFont(font);
g2d.setColor(Color.WHITE);
g2d.drawString((new StringBuilder("")).append(pad.point).toString(), 70, 20);
g2d.drawString((new StringBuilder("")).append(pad2.point).toString(), 610, 20);
if(Ball.x == 0){
pad2.point++;
Ball.x = 350;
Ball.y = 205;
Ball.dx = 0;
Ball.dy = 0;
pad.y = 205;
pad2.y = 205;
}if(Ball.x == 700){
pad.point++;
Ball.x = 350;
Ball.y = 205;
Ball.dx = 0;
Ball.dy = 0;
pad.y = 205;
pad2.y = 205;
}
}else {
try {
fundo = ImageIO.read(getClass().getResource(
"game_over.png"));
} catch (IOException e) {
throw new RuntimeException(
"A imagem de fundo não pode ser carregada!", e);
}
g2d.drawImage(fundo, 0, 0, null);
}
g.dispose();
}
@Override
public void actionPerformed(ActionEvent e) {
pad.move();
pad2.move();
Ball.move();
checkCollisions();
repaint();
}
public void checkCollisions(){
Rectangle ball = Ball.getBounds();
Rectangle Pad1 = pad.getBounds();
if(Pad1.intersects(ball)){
Ball.dx = 2;
}
Rectangle Pad2 = pad2.getBounds();
if(Pad2.intersects(ball)){
Ball.dx = -2;
}}
private class KeyboardAdapter extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e) {
pad.keyPressed(e);
pad2.keyPressed(e);
Ball.keyPressed(e);
}
@Override
public void keyReleased(KeyEvent e){
pad.keyReleased(e);
pad2.keyReleased(e);
}
}
}