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