Novo Jogo (Limpar tela e voltar a jogar)

3 respostas
G

Boa Noite,

Fiz um jogo da cobra ele está a funcionar, mas estou com um problema quando se perde as 3 vidas aparece uma string no ecran a dizer “GAme Over”, como faço para quando carregar numa tecla ele apague o game over e volte a jogar?

Grato

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;

public class Board extends JPanel implements Runnable {

    private BufferedImage img = null;
    private int pontos;
    private int vidas;
    private int nivel;
    private int macaApanhadas;
    private Thread thread;
    private Jogador jogador;
    private Maca maca;

    public Board() {
        addKeyListener(new Tadpter());
        jogador = new Jogador();
        maca = new Maca();
        maca.locateApple();
        localizaçaoInicial();
        vidas = 3;
        nivel = 1;
        macaApanhadas = 0;
        setFocusable(true);
        setDoubleBuffered(true);
        thread = new Thread(this);
        thread.start();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics g2d = g.create(); //Faz a cópia

        setBackground(Color.BLACK);

        // Desenha a parede
        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 20, 10, 455);
        g2d.fillRect(0, 20, 590, 10);
        g2d.fillRect(585, 20, 10, 455);
        g2d.fillRect(0, 465, 590, 10);

        g2d.drawString("Nivel: " + nivel, 50, 15);
        g2d.drawString("Vidas: " + vidas, 250, 15);
        g2d.drawString("Pontos: " + pontos, 450, 15);

        // Desenha a maça
        g2d.setColor(Color.RED);
        g2d.fillOval(maca.getX(), maca.getY(), 10, 10);

        // Desenha o pau da maça
        g2d.setColor(Color.GREEN);
        g2d.drawLine(maca.getX() + 5, maca.getY(), maca.getX() + 5, maca.getY() - 3);

        // Desenha a cabela e o corpo da cobra
        g2d.setColor(Color.GREEN);
        for (int z = 0; z < jogador.getCorpo(); z++) {
            if (z == 0) {
                g2d.fillOval(jogador.getX()[z], jogador.getY()[z], 10, 10);
            } else {
                g2d.drawOval(jogador.getX()[z], jogador.getY()[z], 10, 10);
            }
        }
        g2d.drawImage(img, 0, 0, null);
        g2d.dispose();
    }

    public void localizaçaoInicial() {
        jogador.setCorpo(3);
        for (int z = 0; z < jogador.getCorpo(); z++) {
            jogador.getX()[z] = 280 - z * 10;
            jogador.getY()[z] = 200;
        }
        jogador.setFim(false);
        jogador.Inicio();
    }

    public void acertarMaca() {
        if ((jogador.getX()[0] == maca.getX()) && (jogador.getY()[0] == maca.getY())) {
            int corpo = jogador.getCorpo();
            jogador.setCorpo(corpo += 1);
            pontos += 100;
            macaApanhadas += 1;
            maca.locateApple();
        }
    }

    public void colisao() {
        for (int z = jogador.getCorpo(); z > 0; z--) {
            if ((z > 0) && (jogador.getX()[0] == jogador.getX()[z]) && (jogador.getY()[0] == jogador.getY()[z])) {
                jogador.setFim(true);
            }
        }
    }

    public void VerificarFim() {
        if (jogador.getFim() == true) {
            if (vidas > 1) {
                vidas -= 1;
                maca.locateApple();
                localizaçaoInicial();
            } else {
                GameOver();
            }
        }
    }  

    public void GameOver() {
        if (img == null) {
            img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
        }

        jogador.setFim(false);
        vidas = 0;

        Graphics2D g = img.createGraphics();

        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        g.setColor(Color.WHITE);
        g.setFont(new Font("Arial", Font.BOLD, 30));
        g.drawString("GAME OVER", 200, 200);
    }

    public void novoJogo() {
        if (jogador.getNovoJogo() == true) {
            jogador.setNovoJogo(false);
            jogador.Inicio();
            maca.locateApple();
            vidas = 3;
            pontos = 0;
            nivel = 1;
            macaApanhadas = 0;
            localizaçaoInicial();
        }
    }

    public void run() {
        while (jogador.getFim() == false) {
            jogador.movimento();
            colisao();
            acertarMaca();
            VerificarFim();
            novoJogo();

            if (macaApanhadas <= 10) {
                try {
                    Thread.sleep(200);
                } catch (InterruptedException ex) {
                }
            } else if(macaApanhadas <= 20 && macaApanhadas >= 10){
                try {
                    nivel = 2;
                    Thread.sleep(150);
                } catch (InterruptedException ex) {
                }
             } else if(macaApanhadas <= 30 && macaApanhadas >= 20){
                try {
                    nivel = 3;
                    Thread.sleep(100);
                } catch (InterruptedException ex) {
                }
             } else if(macaApanhadas <= 40 && macaApanhadas >= 30){
                try {
                    nivel = 4;
                    Thread.sleep(50);
                } catch (InterruptedException ex) {
                }
            } else {
                try {
                    nivel = 5;
                    Thread.sleep(30);
                } catch (InterruptedException ex) {
                }
            }
            repaint();
        }
    }
    class Tadpter extends KeyAdapter {
        public void keyPressed(KeyEvent e) {
            jogador.keyPressed(e);
        }
    }
}

3 Respostas

eliangela

Vc pode remover o JPanel do seu JFrame. Depois vc cria uma nova instância do seu JPanel do Jogo e adiciona novamente.

seuFrame.remove(seuPanelDoJogo);
seuPanelDoJogo = new JPanel();
seuFrame.getContentPane.add(seuPanelDoJogo);
seuFrame.repaint();
G

oi eliangela só hoje consegui ver se dava:X e nao consegui fazer do jeito que vc falou

Fiz assim

public void limparTela(){
        if (img == null) {
            img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
        }

        Graphics2D g = img.createGraphics();

        g.setColor(Color.BLACK);
        g.fillRect(0, 0, getWidth(), getHeight());

        paintComponent(g);
    }

Limpar limpa mas depois a cobra para e não anda mais o terei de fazer?

Grato

eliangela

GuilhermeG:
Limpar limpa mas depois a cobra para e não anda mais o terei de fazer?

Grato

Eu pensei no seguinte: em vc reinstanciar todos os seus objetos, a tela, a cobra, etc, da mesma maneira que vc fez da primeira vez.

Até

Criado 24 de fevereiro de 2010
Ultima resposta 1 de mar. de 2010
Respostas 3
Participantes 2