# Pong Programm



## Java xyrse123 (11. Nov 2017)

Hallo,
Ich habe ein Pong Spiel programmiert, doch ab und zu prallt der Ball nicht vom Schläger ab, sondern geht hindurch. Ich bin ein ziemlicher Anfänger und weiss echt nicht mehr weiter. Könnte mir dabei jemand helfen ?

Schonmal Danke im Voraus

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 hier die Hauptklasse:

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

}
}


----------



## krgewb (11. Nov 2017)

Hier mal dein Code in leserlicherer Form:


```
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 hier die Hauptklasse:

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

	}
}
```


----------

