G
Guest
Gast
Hallo!
schreibe gerade ein ping pong spiel. der ball prallt schon an den wänden ab. mein problem ist nun, dass ich nicht weiß wie ich das machen soll, dass der ball abprallt wenn er den balken berührt.
habs so versucht, ist aber ein blöder ansatz:
hier das ganze programm:
schreibe gerade ein ping pong spiel. der ball prallt schon an den wänden ab. mein problem ist nun, dass ich nicht weiß wie ich das machen soll, dass der ball abprallt wenn er den balken berührt.
habs so versucht, ist aber ein blöder ansatz:
Code:
if(x_pos + 60 == x_posb && y_pos == y_posb) {
x_speed = -1;
y_speed = -1;
sc = sc + 5;
}
hier das ganze programm:
Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Game extends Applet implements Runnable, KeyListener {
int x_pos = 20;
int y_pos = 100;
int radius = 20;
int appletsize_x = 200;
int appletsize_Y = 200;
int x_speed = 1;
int y_speed = 1;
int currentLine;
int x_posb = 100;
int y_posb = 180;
int x_speedb = 1;
int radiusb = 100;
AudioClip bumb;
private Image dbgImage;
private Graphics dbg;
private Image hintergrund;
private int sc;
private String score;
public void init() {
setBackground(Color.LIGHT_GRAY);
bumb = getAudioClip(getCodeBase(), "bump.wav");
hintergrund = getImage(getCodeBase(), "hintergrund.jpg");
this.addKeyListener(this);
} // ende init()
public void keyPressed(KeyEvent en) {
int k = en.getKeyCode();
if (k == KeyEvent.VK_LEFT) {
x_speedb = -1;
}
else if(k == KeyEvent.VK_RIGHT) {
x_speedb = +1;
}
else if(k == KeyEvent.VK_SPACE) {
x_speedb = 0;
}
}
// ende Aktionen
public void keyReleased(KeyEvent ke) { ; }
public void keyTyped(KeyEvent ke) { ; }
public void start() {
Thread th = new Thread(this);
th.start();
} // ende start()
public void stop() {
} // ende stop()
public void destroy() {
} // ende destroy()
public void run () {
// Erniedrigen der ThreadPriority um zeichnen zu erleichtern
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
// Solange true ist läuft der Thread weiter
while (true)
{
// Wenn der Ball den rechten Rand berührt, dann prallt er ab
if (x_pos > appletsize_x - radius) {
x_speed = -1;
}
// Ball brührt linken Rand und prallt ab
else if (x_pos < radius) {
x_speed = +1;
}
else if(y_pos > appletsize_Y - radius) {
y_speed = -1;
sc = sc - 20;
bumb.play();
}
else if(y_pos < radius) {
y_speed = +1;
}
// Ball
x_pos += x_speed;
y_pos += y_speed;
// Balken
x_posb += x_speedb;
if(x_posb > appletsize_x - 60) {
x_speedb -= 1; // -
}
else if(x_posb < radius - radius) {
x_speedb += 1; // +
}
// Wenn balken ball berührt
if(x_pos + 60 == x_posb && y_pos == y_posb) {
x_speed = -1;
y_speed = -1;
sc = sc + 5;
}
x_posb += x_speedb;
repaint();
try
{
// Stoppen des Threads für in Klammern angegebene Millisekunden
Thread.sleep (10);
}
catch (InterruptedException ex)
{
// do nothing
}
// Zurücksetzen der ThreadPriority auf Maximalwert
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}
// Bildschirmflimmern beseitigen (Doppelbufferung)
public void update(Graphics g) {
if(dbgImage == null) {
dbgImage = createImage(this.getSize().width, this.getSize().height);
dbg = dbgImage.getGraphics();
}
// Bildschirm in Hintergrund löschen
dbg.setColor(getBackground());
dbg.fillRect(0,0,this.getSize().width, this.getSize().height);
// Bildschirm in Vordergrund zeichnen
dbg.setColor(getForeground());
paint(dbg);
// Ausgeben
g.drawImage(dbgImage,0,0,this);
} // ende update
public void paint(Graphics g) {
g.drawImage(hintergrund,0,0,this);
g.setColor(Color.white);
g.drawString("Score: "+sc,10,20);
// Balken
g.setColor(Color.MAGENTA);
g.fillRect(x_posb ,y_posb, 60,10);
g.setColor(Color.red);
// Kugel zeichen
g.fillOval(x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
} // ende paint()
}