Probleme bei Pong

Java xyrse123

Bekanntes Mitglied
Hallo,
Ich habe neulich ein Pong Spiel programmiert. Das Problem liegt beim Abprallen des Balls vom Schläger, der Ball prallt relativ häufig ab, doch ab und zu geht er einfach durch den Schläger durch. Ich wäre für jede Hilfe dankbar.
 

Java xyrse123

Bekanntes Mitglied
Hier der Code:
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Pong extends JPanel {
    // {
    int x = 30, y = 300;// Schläger 1
    int Px = 200, Py = 200; // Ball
    int x2 = 770, y2 = 300; // Schläger 2
    int dPx = 10, dPy = 10; // Geschwindigkeiz Ball
    boolean Spieler1o = false; // oben
    boolean Spieler1u = false; // unten
    boolean Spieler2o = false;
    boolean Spieler2u = false;

    public Pong() {
        setPreferredSize(new Dimension(800, 600));

        Ball neu = new Ball();
        neu.start();
        Schläger s = new Schläger();
        s.start();
    }

    public void paint(Graphics gr) { // beiden Schläger und Ball
        Graphics2D g = (Graphics2D) gr; // werden gezeichnet
        g.setColor(Color.WHITE);
        g.fill(g.getClipBounds());
        g.setColor(Color.BLACK);
        g.fillRect(x, y, 10, 80);
        g.fillOval(Px, Py, 30, 30);
        g.fillRect(x2, y2, 10, 80);
    }

    public void PositionSchläger1() { // AnfangsPosition
        x = 30;
        y = 300;
        repaint();
    }

    public void PositionBall() { // AnfangsPosition
        Px = 200;
        Py = 200;
        repaint();

    }

    public void PositionSchläger2() {
        x2 = 760;
        y2 = 300;
        repaint();
    }

    class Ball extends Thread {
        void bewegen() {
            Px = Px + dPx; //
            Py = Py + dPy;

            if (Px < 0) { // 30
                Px = 0;
                dPx = -dPx;
            }
            if (Py < 0) { // 30
                Py = 0;
                dPy = -dPy;
            }
            if (Py > 570) {
                Py = 570;
                dPy = -dPy;
            }
            if (Px > 770) {
                Px = 770;
                dPx = -dPx;
            }

            if (Px == 40 && Py >= y && Py <= y + 80) { // getY //80 //Py
                Px = 40;

                dPx = -dPx;

                dPy = -dPy;
            }

            if (Px == 740 && Py >= y2 && Py <= y2 + 80) {// && Px>=y2 && Px<=
                                                            // y2+80)
                Px = 740;
                dPx = -dPx;
                dPy = -dPy;
            }
            repaint();
        }

        public void run() { // Thread für Ball

            while (!isInterrupted()) {

                bewegen();
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    return;
                }
            }
        }
    }

    class Schläger extends Thread implements KeyListener {
        Schläger() {
            addKeyListener(this);
        }

        public void run() {

            while (true) {
                if (Spieler1o == true) {
                    y -= 12;
                }
                if (Spieler1u == true) {
                    y += 12;
                }
                if (Spieler2o == true) {
                    y2 -= 12;
                }
                if (Spieler2u == true) {
                    y2 += 12;
                }
                if (y2 > 520) { // 600-80 wegen Schlägerlänge
                    y2 = 520;
                }
                if (y2 < 0) {
                    y2 = 0;
                }
                if (y < 0) {
                    y = 0;
                }
                if (y > 520) {
                    y = 520;
                }
                repaint();
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        public void keyPressed(KeyEvent e) { // Spieler 1
            if (e.getKeyCode() == KeyEvent.VK_W) {
                Spieler1o = true;
            }
            if (e.getKeyCode() == KeyEvent.VK_S) {
                Spieler1u = true;
            }
            if (y > 520) { // 600-80 wegen Schlägerlänge
                y = 520;
            }
            if (y < 0) {
                y = 0;
            }
            if (e.getKeyCode() == KeyEvent.VK_UP) { // Spieler2
                Spieler2o = true;
            }
            if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                Spieler2u = true;
            }
        }

        public void keyReleased(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_W) {
                Spieler1o = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_S) {
                Spieler1u = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_UP) {
                Spieler2o = false;
            }
            if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                Spieler2u = false;
            }
        }

        public void keyTyped(KeyEvent e) {
        }
    }
}
und die Hauptklasse:
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Fenster extends JFrame {
  private Pong pong = new Pong();

  public Fenster() {
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    getContentPane().add(pong);

    pong.PositionBall();
    pack();
    getRootPane();setVisible(true);

    pong.PositionSchläger2();
    pong.PositionSchläger1();
    pong.setFocusable(true);

  }

  public static void main(String[] args) {
    new Fenster();

  }
}
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,

(a) nutze bitte die Code-Tags - so bekommt man ja Augenkrebs !!
(b) wie wäre es mit ein paar Kommentaren, in den Du an geeigenten Stellen beschreibst, was der Code tun soll ...

VG Klaus
 

Java xyrse123

Bekanntes Mitglied
Hallo,
Ich denke das manchmal die Koordinaten vom Schläger falsch bestimmt werden und deswegen der Ball manchmal durchgeht.
Wie kann ich den noch Kommentare hinzuzufügen?
VG Linus
 

Java xyrse123

Bekanntes Mitglied
Hier noch einmal der Hauptteil mit mehr Kommentaren, hoffe es reicht so.

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Pong extends JPanel {
    
     int x = 30, y = 300; // Anfangskoordinaten Schläger 1
     int Px = 200, Py = 200; //Anfangskoordinaten Ball
     int x2 = 770, y2 = 300; //Anfangskoordinaten Schläger 2
     int dPx = 10, dPy = 10; // Geschwindigkeit Ball
     boolean Spieler1o = false; // Pfeiltaste oben am Anfang Taste nicht gedrückt
     boolean Spieler1u = false; // Pfeiltast unten
     boolean Spieler2o = false;
     boolean Spieler2u = false;

     public Pong() {
         setPreferredSize(new Dimension(800, 600)); // Fenstergröße

         Ball neu = new Ball();
         neu.start(); // Thraed Ball wird gestartet
         Schläger s = new Schläger(); // Thread Schläger wird gestartet
         s.start();
     }

     public void paint(Graphics gr) { // beiden Schläger und Ball
         Graphics2D g = (Graphics2D) gr; // werden gezeichnet
         g.setColor(Color.WHITE);
         g.fill(g.getClipBounds()); // damit die Zeichnung überschrieben wird
         g.setColor(Color.BLACK);
         g.fillRect(x, y, 10, 80); // Ball und Schläger werden gezeichnet
         g.fillOval(Px, Py, 30, 30);
         g.fillRect(x2, y2, 10, 80);
     }

     public void PositionSchläger1() { // wird auf AnfangsPosition gesetzt
         x = 30;
         y = 300;
         repaint();
     }

     public void PositionBall() { // AnfangsPosition
         Px = 200;
         Py = 200;
         repaint();

     }

     public void PositionSchläger2() // Anfangsposition{
         x2 = 760;
         y2 = 300;
         repaint();
     }

     class Ball extends Thread { // thread für Ball
         void bewegen() {
             Px = Px + dPx; //die Bewegung
             Py = Py + dPy;

             if (Px < 0) { // Ball prallt von der Wand ab
                 Px = 0;
                 dPx = -dPx;
             }
             if (Py < 0) {  // Ball prallt von der Wand ab
                 Py = 0;
                 dPy = -dPy;
             }
             if (Py > 570) { // Ball prallt von der Wand ab
                 Py = 570;
                 dPy = -dPy;
             }
             if (Px > 770) { // Ball prallt von der Wand ab
                 Px = 770;
                 dPx = -dPx;
             }

             if (Px == 40 && Py >= y && Py <= y + 80) { // Hier soll er vom Schläger1 abprallen
                 Px = 40;
                 dPx = -dPx;                
             }

             if (Px == 740 && Py >= y2 && Py <= y2 + 80) {//// Hier soll er vom Schläger2 abprallen
                                                            
                 Px = 740;
                 dPx = -dPx;
                 dPy = -dPy;
             }
             repaint();
         }

         public void run() { // Thread für Ball

             while (!isInterrupted()) {

                 bewegen();
                 try {
                     Thread.sleep(50);
                 } catch (InterruptedException e) {
                     return;
                 }
             }
         }
     }

     class Schläger extends Thread implements KeyListener {
         Schläger() {
             addKeyListener(this); // KeyListenr wird hinzugefügt
         }

         public void run() {

             while (true) { // solange Spieler Taste drückt
                                 //wird Schläger bewegt
               if (Spieler1o == true) { // Bewegung Schläger1
                     y -= 12;
                 }
                 if (Spieler1u == true) {
                     y += 12;
                 }
                 if (Spieler2o == true) { // Bewegung Schläger2
                     y2 -= 12;
                 }
                 if (Spieler2u == true) {
                     y2 += 12;
                 }
                
                   if (y2 > 520) { // 600-80 wegen Schlägerlänge
                     y2 = 520; // Damit die Schläger nicht aus dem Bild verschwinden
                 }
                 if (y2 < 0) {
                     y2 = 0;
                 }
                 if (y < 0) {
                     y = 0;
                 }
                 if (y > 520) {
                     y = 520;
                 }
                 repaint();
                 try {
                     Thread.sleep(50);
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
             }
         }

         public void keyPressed(KeyEvent e) { // Spieler 1 hier wird geguckt ob Taste gedrückt
             if (e.getKeyCode() == KeyEvent.VK_W) {
                 Spieler1o = true;
             }
             if (e.getKeyCode() == KeyEvent.VK_S) {
                 Spieler1u = true;
             }
            
             if (e.getKeyCode() == KeyEvent.VK_UP) { // Spieler2 hier wird geguckt ob Taste gedrückt
                 Spieler2o = true;
             }
             if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                 Spieler2u = true;
             }
         }

         public void keyReleased(KeyEvent e) { // Hier ob Taste wieder losgelassen
             // wenn ja stoppt Schlägerbewegung
           if (e.getKeyCode() == KeyEvent.VK_W) {
                 Spieler1o = false;
             }
             if (e.getKeyCode() == KeyEvent.VK_S) {
                 Spieler1u = false;
             }
             if (e.getKeyCode() == KeyEvent.VK_UP) {
                 Spieler2o = false;
             }
             if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                 Spieler2u = false;
             }
         }

         public void keyTyped(KeyEvent e) {
         }
     }
}
VG

Linus
 

mrBrown

Super-Moderator
Mitarbeiter
Mit einer sinnvollen Frage bekommt man auch hier schnelle Hilfe und gute Tipps ;)

Den relevanten Tipp hast du ja dort schon bekommen, der Ball kann "in deinem Schläger" bzw hinter deinem Schläger landen - wahrscheinlich ist das das Problem

EDIT: hast du bedacht, das der gezeichnete Ball und der gezeichnete Schläger eine Größe haben, der Code diese aber nicht immer passend berücksichtigst?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Java Pong Probleme Spiele- und Multimedia-Programmierung 7
L Probleme Bei Pong Programmierung Spiele- und Multimedia-Programmierung 2
N Pong - noch 2 kleinere Probleme Spiele- und Multimedia-Programmierung 16
E Scaling Probleme Spiele- und Multimedia-Programmierung 6
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
J YoutubeAPI Livestream probleme Spiele- und Multimedia-Programmierung 3
G [LibGDX] Button Klick Probleme Spiele- und Multimedia-Programmierung 1
T Probleme mit JButton Spiele- und Multimedia-Programmierung 5
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
P Probleme mit VLCJ Spiele- und Multimedia-Programmierung 0
F Probleme bei der Soundwiedergabe Spiele- und Multimedia-Programmierung 0
S Probleme bei Breakout - Brick kollision Spiele- und Multimedia-Programmierung 2
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
F BlueJ Ufospiel Probleme Spiele- und Multimedia-Programmierung 1
B Probleme mit AndEngine in Android Spiele- und Multimedia-Programmierung 1
M 2048, 3 kleine Probleme Spiele- und Multimedia-Programmierung 4
A Probleme mit Darstellung von Umgebungen mittels mehrdimensionaler Arrays Spiele- und Multimedia-Programmierung 8
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
J Perfomance Probleme beim eigenen Editor Spiele- und Multimedia-Programmierung 1
K Probleme beim kompilieren von javakara Spiele- und Multimedia-Programmierung 10
Q LWJGL - Alpha-Probleme Spiele- und Multimedia-Programmierung 2
M Point & Click Thread Probleme Spiele- und Multimedia-Programmierung 20
K Probleme mit .jar Spiele- und Multimedia-Programmierung 12
L Probleme beim kompilieren von javakara Spiele- und Multimedia-Programmierung 3
D Probleme mit der Runnable jar Datei Spiele- und Multimedia-Programmierung 3
D Probleme mit objekt initializirung mit Mouselistener Spiele- und Multimedia-Programmierung 10
Black_ixx Hintergrund & Koordinaten Probleme Spiele- und Multimedia-Programmierung 2
B Probleme mit Texturen Spiele- und Multimedia-Programmierung 7
Maxim6394 Probleme bei Sidescroller Spiele- und Multimedia-Programmierung 5
R Probleme mit JPanel!KeyListener geht nicht Spiele- und Multimedia-Programmierung 6
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Maxim6394 [Java3D] Probleme mit KeyFrame Animationen Spiele- und Multimedia-Programmierung 9
T Probleme mit Skysphere in Opengl Spiele- und Multimedia-Programmierung 4
B Probleme mit redraw() Spiele- und Multimedia-Programmierung 3
Gossi Quaxlis 2D Tutorial....Probleme nach hinzufügen der Kollisionsabfrage Spiele- und Multimedia-Programmierung 16
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
S Probleme mit Tutorial Spiele- und Multimedia-Programmierung 3
T Probleme mit AffineTransform Spiele- und Multimedia-Programmierung 13
W Probleme mit Mouselook Spiele- und Multimedia-Programmierung 2
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 5
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 2
M [Spiel] Kartenspiel Leben und Tod Tips und Probleme Spiele- und Multimedia-Programmierung 7
G [Java3D] Probleme bei Animation Spiele- und Multimedia-Programmierung 4
S Probleme mit JMenu in einem JFrame mit BufferStrategy Spiele- und Multimedia-Programmierung 2
Steev Probleme mit Kameraausrichtung bei ISO-Map Spiele- und Multimedia-Programmierung 3
R MediaPlayer macht Probleme Spiele- und Multimedia-Programmierung 2
N Jogl Probleme mit dem Buffer beim laden einer Textur Spiele- und Multimedia-Programmierung 2
prakdi Probleme mit Quaxlis tutorial Spiele- und Multimedia-Programmierung 5
T Java Sound Probleme Spiele- und Multimedia-Programmierung 8
P probleme mit key event Spiele- und Multimedia-Programmierung 11
T Bekanntes Heli Spiel -> Aber Probleme damit Spiele- und Multimedia-Programmierung 30
S Probleme mit Thread beim Streaming Spiele- und Multimedia-Programmierung 1
O Ampel - Probleme mit der Farbgebung Spiele- und Multimedia-Programmierung 16
F Probleme bei Bewegung Spiele- und Multimedia-Programmierung 7
P Probleme mit Vista und JOGL Spiele- und Multimedia-Programmierung 2
P Probleme mit Wolkenbewegung Spiele- und Multimedia-Programmierung 5
W Probleme mit dem setTextureCoordinate Spiele- und Multimedia-Programmierung 3
D Probleme beim Download von GIF-Bildern Spiele- und Multimedia-Programmierung 4
S Probleme mit dem Licht und dem KeyListener Spiele- und Multimedia-Programmierung 2
D Probleme bei ATI Karten bekannt? Spiele- und Multimedia-Programmierung 4
H Probleme bei Rotation Spiele- und Multimedia-Programmierung 9
X Probleme. Spiele- und Multimedia-Programmierung 2
E Probleme mit Kollisionserkennung ! Spiele- und Multimedia-Programmierung 2
F Probleme mit selbsterstelltem transparenten PNG Spiele- und Multimedia-Programmierung 5
S probleme mit material Spiele- und Multimedia-Programmierung 2
W Probleme beim entfernen von Childs im HauptSceneGraph Spiele- und Multimedia-Programmierung 8
M Probleme mit WaveFront-Object - Datei Spiele- und Multimedia-Programmierung 7
B Probleme beim zeichnen Spiele- und Multimedia-Programmierung 15
D Gomoku --- Probleme bei Instanzierung Spiele- und Multimedia-Programmierung 2
G Probleme beim installieren java 3d linux Spiele- und Multimedia-Programmierung 4
G Sound Probleme Spiele- und Multimedia-Programmierung 2
S Probleme mit Canvas! Spiele- und Multimedia-Programmierung 2
S Jump'n'Run: Probleme mit Kollision Spiele- und Multimedia-Programmierung 13
C Probleme mit Java3D (sun.awt.DrawingSurface) in Java 5 Spiele- und Multimedia-Programmierung 10
R Probleme mit Sound in Applikation. HILFE Spiele- und Multimedia-Programmierung 5
N Probleme mit View Spiele- und Multimedia-Programmierung 3
J Pong Programm Spiele- und Multimedia-Programmierung 1
T Pong Hilfe bei einer Website Spiele- und Multimedia-Programmierung 4
S Pong java.lang.StackOverflowError Spiele- und Multimedia-Programmierung 3
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
T Torquemada´s erstes Game (Pong) Spiele- und Multimedia-Programmierung 5
A Pong Grafikgestaltung Spiele- und Multimedia-Programmierung 10
R Pong -Reruns möglich machen Spiele- und Multimedia-Programmierung 2
Y Pong Spiel Score Zähler! -.- Spiele- und Multimedia-Programmierung 18
Y Ping Pong Spiele- und Multimedia-Programmierung 4
M Einfaches Ping-Pong Spiel Spiele- und Multimedia-Programmierung 3
U Pong Spiele- und Multimedia-Programmierung 7
1 Ping Pong langsam Spiele- und Multimedia-Programmierung 13
BattleMaster246 Pong - JOGL Spiele- und Multimedia-Programmierung 2
J ping pong ball abprallen lassen Spiele- und Multimedia-Programmierung 12
L Java Ping Pong Spiele- und Multimedia-Programmierung 1
J Tips für ein kleines Pong-Applet Spiele- und Multimedia-Programmierung 4
S Ping Pong: KeyListener in Paint und while Spiele- und Multimedia-Programmierung 10
W Hilfe bei Pong mit Bluej Spiele- und Multimedia-Programmierung 4
M Fragen zu meinem Pong-Clone Spiele- und Multimedia-Programmierung 6
G Ping Pong Frage Spiele- und Multimedia-Programmierung 17
G Pong klon mit Steuerungsprobleme Spiele- und Multimedia-Programmierung 8
B Pong-Klon. Denkfehler bei kollisionstest Spiele- und Multimedia-Programmierung 3
B Ping Pong Spiele- und Multimedia-Programmierung 11

Ähnliche Java Themen

Neue Themen


Oben