Fazer o menu

6 respostas
php
F
package projeto;

import static java.lang.Thread.sleep;

//Desenvolvimento do jogo em Java.     Data de entrega: 27/09/2019          Nome: Hélder Silva      Turma:2171080TIAB      Numero do Utilizador: 034832111

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.geom.Rectangle2D;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

@SuppressWarnings("serial")
public class Projeto extends JFrame {

    private class Grafico extends JPanel {

        private final Font fonte = new Font("Digiface", Font.BOLD, 70);

        @Override // @Override quando utiliza esse comando, ele garante que você não vai sobrescrever o que não herdou.
        public void paintComponent(Graphics g) {
            final Graphics2D g2d = (Graphics2D) g; // Graphics é a classe fundamental para renderizar formas, textos e imagens.
            g2d.setColor(Color.BLACK); // Este codigo faz que o ecrã fica preto ou qualquer cor.
            g2d.fillRect(0, 0, getWidth(), getHeight());

            g2d.setColor(Color.YELLOW); // Eate codigo é cor do placar.
            g2d.setFont(fonte);
            g2d.drawString(pontosJogador + "     " + pontosAdversario, 310, 100); // Este codigo serve para pontuação do placar

            g2d.setColor(Color.LIGHT_GRAY); // Este codigo é a cor da barreira de cima
            g2d.fill(new Rectangle2D.Double(40, 20, 700, 20)); // Este codigo serve para coordenado na barreira de cima, tamanho e a forma.

            g2d.setColor(Color.LIGHT_GRAY); // Este codigo é a cor da barreira de baixo
            g2d.fill(new Rectangle2D.Double(40, 520, 700, 20)); // Este codigo serve para coordenado na barreira de baixo, tamanho e a forma.

            g2d.setColor(Color.WHITE); // Este codigo é a cor do meio campo
            g2d.fill(new Rectangle2D.Double(400, 40, 5, 480)); // Este codigo serve para coordenado do meio campo, tamanho e a forma.

            g2d.setColor(Color.BLUE);
            g2d.fillRect(jogador.x, jogador.y, jogador.width, jogador.height); // Este codigo serve para coordenado do teu objeto para jogar, tamanho e a forma.

            g2d.setColor(Color.RED);
            g2d.fillRect(adversario.x, adversario.y, adversario.width, adversario.height); // Este codigo serve para coordenado do teu adversario para jogar,
                                                                                           // tamanho e a forma.

            g2d.setColor(Color.WHITE); // Este codigo é cor da bola.
            g2d.fillOval(bola.x, bola.y, bola.width, bola.height); // Este codigo serve para coordenadar a bola e o tamanho da bola.
        }
    }

    public static void main(String[] args) {
        Projeto projeto1 = new Projeto();
        projeto1.executar();
    }

    private Point velocidade = new Point(3, 3); // coordenada correspondentes à velocidade dos eixos x e y da bola

    private Rectangle bola = new Rectangle(50, 50, 20, 20); // forma da bola
    private Rectangle jogador = new Rectangle(40, 100, 20, 100); // forma do jogador
    private Rectangle adversario = new Rectangle(720, 100, 20, 100); // forma do adversario

    private int pontosJogador = 0;
    private int pontosAdversario = 0;

    private int vidas = 5;

    private int teclaPressionada = 0;

    private Grafico grafico;

    public void executar() {
        criarJanela();
        tratarTeclas();
    }

    private void aguardar() {
        try {
            sleep(10); // aqui você pode ter que ajustar de acordo com a velocidade de sua máquina
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private void criarJanela() { // Este codigo até linha 102 serve para ciar uma Janela para o jogo.
        setTitle(" Desenvolvimento do jogo "); // Este codigo serve para dar o nome do titulo.
        setSize(800, 600); // Este código é o Tamanho do ecrã. 800 é a largura e 600 é comprimento.
        setLocationRelativeTo(null);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Este codigo faz que quando fecha o jogo o programa diz que fechou no caso não tiver este codigo faz
                                                        // que o programa continua.
        setVisible(true); // Este codigo faz que o titulo torna visível.

        grafico = new Grafico();
        add(grafico);
        Timer timer = new Timer(3, event -> jogar()); // Este codigo serve para velocidade da bola.
        timer.start();
    }

    private void jogar() {
        moverBola();
        verificarJogadaAdversario();
        verificarJogadaJogador();
        verificarColisaoAdversario();
        verificarColisaoJogador();
        verificarPontuacao();
        grafico.repaint();
        aguardar();
    }

    private void moverBola() {
        bola.x += velocidade.x;
        bola.y += velocidade.y;

        if (bola.y > 500 || bola.y <= 40) {
            velocidade.y *= -1;
        }
    }

    private void tratarTeclas() {
        addKeyListener(new KeyAdapter() { // Este codigo serve para usar setas cima, baixo, esquerda ou direita para o movimento do objeto ou personagem.

            @Override
            public void keyPressed(KeyEvent e) {
                teclaPressionada = e.getKeyCode();
            }

            @Override
            public void keyReleased(KeyEvent e) {
                teclaPressionada = 0;
            }
        });
    }

    private void verificarColisaoAdversario() {
        if (bola.intersects(adversario)) { // verifica se o adversario bateu na bola
            velocidade.x *= -1;
            bola.x = adversario.x - bola.width;
        }
    }

    private void verificarColisaoJogador() {
        if (bola.intersects(jogador)) { // verifica se o jogador bateu na bola
            velocidade.x *= -1;
            bola.x = jogador.x + jogador.width;
        }
    }

    private void verificarJogadaAdversario() {
        if (bola.x > 400) { // Este codigo serve para o adversario jogar automaticamente. Basicamente é um computador a jogar.
            if (bola.y > adversario.y + 50 && adversario.y < 420) {
                adversario.y += 3;
            }

            if (bola.y < adversario.y && adversario.y > 40) {
                adversario.y -= 3;
            }
        }
    }

    private void verificarJogadaJogador() {
        if (teclaPressionada == KeyEvent.VK_UP && jogador.y > 40) {
            jogador.y -= 3; // Este codigo serve para mover o tua forma mais rapido nas setas.
        } else if (teclaPressionada == KeyEvent.VK_DOWN && jogador.y < 420) {
            jogador.y += 3;
        }
    }

    private void verificarPontuacao() {
        boolean reposicionarBola = false;

        if (bola.x < jogador.x) { // verifica se o jogador deixou a bola passar
            pontosAdversario++;
            vidas--;
            reposicionarBola = true;
        }

        if (bola.x > (adversario.x + adversario.width)) { // verifica se o adversario deixou a bola passar
            pontosJogador++;
            reposicionarBola = true;
        }

        if (reposicionarBola) {
            bola.x = 400; // Este codigo serve quando você ou adversário marcam, a bola automaticamente vai para o meio. Basicamente é coordenado do meio campo.
            velocidade.x = 5;
        }
    }
}

6 Respostas

staroski

Semana passada alguém teve a mesma dúvida.
O autor apagou as mensagens dele, entretanto minha resposta continua lá.
Bons estudos. :slight_smile:

F

Staroski mas pode ajudar me meter obstáculos com esse código por favor. Agredecia imenso e tenha bom dia

F

Senhor o meu adversário consegue marcar no meu lado e eu não consigo marcar na dele. Mas o senhor podia fazer diferente do que meteu para outro senhor. Um dia deste podia dar aulas de programação para estar preparado mas para frente assim já sei muito conhecimentos. Obrigado

staroski

É só ajustar sua lógica.
O adversário vai marcar pontos quando o x da bola for menor que o x do jogador.

O jogador vai marcar pontos quando o x da bola for maior que o (x + largura) do adversário.

Você também tem que corrigir os erros na implementação do método paintComponents, pois você está criando várias variáveis diferentes, mas todas apontando para o mesmo objeto g, está errado.

F

Senhor tive hoje todo dia a encontrar o erro e nao encontrei podia ajudar me por favor. Senhor gostava saber se o Senhor podia um dia destes dar aulas para ter ja conhecimento mais para frente

F

senhor vou usar aquele codigo que enviou para outro senhor mas pode ajudar meter o obstaculo por favor

Criado 25 de setembro de 2019
Ultima resposta 26 de set. de 2019
Respostas 6
Participantes 2