Pong Programm

Status
Nicht offen für weitere Antworten.

Java xyrse123

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

}
}
 
Hier mal dein Code in leserlicherer Form:

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

	}
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben