Ping Pong Ball abprallen lassen

Zidinjo

Mitglied
Hallo liebe Community,

bin grade dabei in Java Ping Pong zu programmieren. Bis jetzt hat auch alles wunderbar geklappt doch nun bin ich irgendwie zu blöd, dass der Ball von der Linie abprallt. Kann mir dort irgendjemand weiterhelfen ?


Java:
package de.Marvin;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


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

public class Spielfeld extends JPanel implements Runnable, ActionListener
{
    private int width = 400;
    private int height = 400;
    private int punkteAnzahl = 0;
    private final int balkenHeight= 1;
    private final int balkenWidth=150;
    private final int ballHeight = 20;
    private final int ballWidth = 20;
    private int schwierigkeit = 10;
    private int abstand = 40;
    private Timer t = new Timer(schwierigkeit, this);
    private int ball_X = 100;
    private int ball_Y = 100;
    private int balken_X;
    private int balken_Y;
    private boolean ueberlappenYes = true;
    protected static boolean gedrueckt = false;
    protected static int direction = 0;
    int dx=1,dy=1;
    Graphics2D g2d;
   
    @Override
    public void run() {
        t.start();
        JFrame dasFenster = new JFrame();
        balken_X= (width-balkenWidth)/2;
        balken_Y= 330;
        dasFenster.addKeyListener(new BalkenListener());
        dasFenster.setTitle("PingPong");
        dasFenster.setSize(width, height);
        dasFenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        dasFenster.setResizable(false);
        dasFenster.setLocationRelativeTo(null);
        dasFenster.add(this);
        dasFenster.setVisible(true);
    }
   
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g2d = (Graphics2D)g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.fillOval(ball_X, ball_Y, ballWidth, ballHeight);
       
        g2d.drawLine(balken_X, balken_Y, balken_X+50, balken_Y);
        balkenMove();
        balkenHitBall();
    }
   
    private void balkenHitBall()
    {
        for (int i = balken_X; i < balken_X+50; i++)
        {
            if(ueberlappenYes)
            {
               
                if(ball_X == i && ball_Y == balken_Y)
                {
                    ball_X-=1;
                    ball_Y-=1;
                }
            }
            ueberlappenYes = false;
           
        }
        ueberlappenYes = true;
    }
   
    private void balkenMove()
    {
        if(gedrueckt)
        {
            gedrueckt = false;
            if(direction ==1)
            {
                balken_X-=10;
                if(balken_X < 0)
                    balken_X = 1;
            }
            else if(direction ==2)
            {
                balken_X+=10;
                if((balken_X+50) > width)
                    balken_X = width-50;
            }
        }
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==t)
        {
            if(ball_X <0)
                dx=1;
            if(ball_X>=getWidth()-ballWidth)
                dx=-1;
            if(ball_Y<0)
                dy=1;
            if(ball_Y>getHeight()-ballHeight)
                dy=-1;
           
            ball_X+=dx;
            ball_Y+=dy;
            this.repaint();
        }
    }
}
 

Ähnliche Java Themen

Neue Themen


Oben