package projeto;
//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.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Rectangle2D;
import static java.lang.Thread.sleep;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Projeto extends JFrame implements ActionListener {
Font asd = new Font("Digiface", Font.BOLD, 70);
Grafico gr;
Timer time;
int bx = 50, by = 50, velx = 3, vely = 3, tp = 1, vidas = 5;
int px = 10, py = 100, iax = 750, iay = 100, asd1 = 0, asd2 = 0;
@Override
public void actionPerformed(ActionEvent e) {
try { //Try permite definir um bloco de código cujos erros serão testados enquanto o programa é executado.
jogar();
} catch (InterruptedException ex) {
Logger.getLogger(Projeto.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void jogar() throws InterruptedException {
bx += velx;
by += vely;
if(bx > 705) {
velx *= -1;
asd1++; //Fubnção asd1++ vai servir para quando tu marcar um gol no placar vai acrescentar a pontução.
}
if(bx < 60 && bx > 50 && by > py && by < py + 100) {
velx *= - 1;
asd2++; //Fubnção asd2++ vai servir para quando adversario marcar um gol no placar vai acrescentar a pontução.
}
if(by > 500 || by <= 40) {
vely *= -1;
}
if(bx < -40) {
bx = 400; //Este codigo serve quando você ou adversário marcam, a bola automaticamente vai para o meio. Basicamente é coordenado do meio campo.
velx = 5;
//----------------------------------------------------------------------------------------------------------------------------------------------------------//
sleep (1000);
vidas--;
}
if(bx > 400) { //Este codigo serve para o adversario jogar automaticamente. Basicamente é um computador a jogar.
if(by > iay + 50 && iay < 420) {
iay += 3;
}
if(by < iay && iay > 40) {
iay -= 3;
}
}
gr.repaint();
if(tp == 1 && py > 40) {
py -= 3; //Este codigo serve para mover o tua forma mais rapido nas setas.
} else if(tp == 2 && py < 420) {
py += 3;
}
}
class Grafico extends JPanel {
@Override //@Override quando utiliza esse comando, ele garante que você não vai sobrescrever o que não herdou.
public void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.black); //Este codigo faz que o ecrã fica preto ou qualquer cor.
Graphics2D bar = (Graphics2D) g;
Graphics2D bar1 = (Graphics2D) g;
Graphics2D meio = (Graphics2D) g; //Graphics é a classe fundamental para renderizar formas, textos e imagens.
Graphics2D play = (Graphics2D) g;
Graphics2D iyah = (Graphics2D) g;
Graphics2D bola = (Graphics2D) g;
Graphics2D placar = (Graphics2D) g;
placar.setFont(asd);
bar.setBackground(Color.white); //Este codigo é a cor da barreira de cima
bar1.setBackground(Color.white); //Este codigo é a cor da barreira de baixo
meio.setBackground(Color.white); //Este codigo é a cor do meio campo
play.setBackground(Color.white);
iyah.setBackground(Color.white);
bola.setBackground(Color.white); //Este codigo é cor da bola.
placar.setBackground(Color.white); //Eate codigo é cor do placar.
placar.drawString(asd1 + " "+ asd2, 310, 100); //Este codigo serve para pontuação do placar
bar.fill(new Rectangle2D.Double (40, 20, 700, 20)); //Este codigo serve para coordenado na barreira de cima, tamanho e a forma.
bar1.fill(new Rectangle2D.Double (40, 520, 700, 20)); //Este codigo serve para coordenado na barreira de baixo, tamanho e a forma.
meio.fill(new Rectangle2D.Double (400, 20, 5, 500)); //Este codigo serve para coordenado do meio campo, tamanho e a forma.
play.fill(new Rectangle2D.Double (40, py, 20, 100)); //Este codigo serve para coordenado do teu objeto para jogar, tamanho e a forma.
iyah.fill(new Rectangle2D.Double (720, iay, 20, 100)); //Este codigo serve para coordenado do teu adversario para jogar, tamanho e a forma.
bola.fill(new Rectangle2D.Double (bx, by, 20, 20)); //Este codigo serve para coordenadar a bola e o tamanho da bola.
}
}
public void Janela(){ //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.
gr = new Grafico();
add(gr);
time = new Timer(3, this); //Este codigo serve para velocidade da bola.
time.start();
}
public void controlo() {
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) { //Este codigo serve para usar setas cima, baixo, esquerda ou direita para o movimento do objeto ou personagem.
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == 38 && py > 40) {
tp = 1;
} else if(e.getKeyCode() == 40 && py < 420) {
tp = 2;
}
}
@Override
public void keyReleased(KeyEvent e) {
tp = 0;
}
});
}
public static void main(String[] args) {
Projeto projeto1 = new Projeto ();
projeto1.Janela();
projeto1.controlo();
}
}