Erro de codigo

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(); 
}

}

Dei uma refatorada no seu código para ficar mais legível.
Creio que agora está funcionando como você gostaria.
Dê uma olhada:

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;
        }
    }
}