Hallo!
Ich versuche nun seit Stunden meinen Denkfehler zu finden.
Dem Ball wird eine Richtung gegeben und danach soll er weiter rollen.
Wenn er auf die Bande kommt - prallt er ab ( Einfallswinkel = Ausfallswinkel).
Das Problem bei mir - er wird an der Bande immer mitgeschoben...
Was mache ich falsch
Ich versuche nun seit Stunden meinen Denkfehler zu finden.
Dem Ball wird eine Richtung gegeben und danach soll er weiter rollen.
Wenn er auf die Bande kommt - prallt er ab ( Einfallswinkel = Ausfallswinkel).
Das Problem bei mir - er wird an der Bande immer mitgeschoben...
Was mache ich falsch
Code:
import javax.swing.*;
import java.awt.*;
public class Table extends JPanel implements Runnable{
private Ball ball = new Ball(0,0);
private int x,y;
private int zähler=0;
public void setNewBallPos(){
ball.setPx(0);
ball.setPy(getHeight()/2);
repaint();
}
public void setX(int Px){
x = Px;
}
public void setY(int Py){
y = Py;
}
public void paint(Graphics g){
g.setColor(Color.pink);
g.fillRect(0, 0, getWidth(), getHeight());
ball.displayMe(g);
}
public void run(){
while(zähler<11)
{
// if für x-Koordinate
if (ball.getPx()+x < 0 || ball.getPx()+x+20 > getWidth()){
if(ball.getPx()+x < 0){
ball.setPx(0);
}
else{
ball.setPx(getWidth()-20);
ball.changePosY(y);
}
x = -x;
zähler++;
}
else{
ball.changePosX(x);
}
// if für y-Koordinate
if(ball.getPy()+y < 0 || ball.getPy()+y+20 > getHeight()){
if(ball.getPy()+y < 0){
ball.setPy(0);
}
else{
ball.setPy(getHeight()-20);
ball.changePosX(x);
}
y = -y;
zähler++;
}
else{
ball.changePosY(y);
}
repaint();
try{
Thread.sleep(800);
}
catch(InterruptedException e){}
}
}
Ball getBall(){
return ball;
}
}
Code:
import java.awt.*;
//import javax.swing.*;
public class Ball {
private int Px, Py;
Ball(int x, int y){
Px = x;
Py = y;
}
void changePosX(int x){
Px += x;
}
void changePosY(int y){
Py += y;
}
void displayMe(Graphics g){
g.setColor(Color.cyan);
//variabel machen
g.fillOval(Px, Py, 20, 20);
}
public int getPx() {
return Px;
}
public int getPy() {
return Py;
}
public void setPy(int py) {
Py = py;
}
public void setPx(int px) {
Px = px;
}
}
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Billiard extends JApplet implements ActionListener, MouseListener{
private static final long serialVersionUID = 1L;
private JTextField textUnten, textRechts;
private JButton start;
private JLabel unten, rechts;
private Table tisch = new Table();
private int zahlUnten, zahlRechts;
public void threadstart(){
Thread thread = new Thread(tisch);
thread.start();
}
public int getZahlunten(){
return zahlUnten;
}
public int getZahlrechts(){
return zahlRechts;
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("Start")){
zahlUnten = Integer.parseInt(textRechts.getText());
zahlRechts = Integer.parseInt(textUnten.getText());
tisch.setX(zahlUnten);
tisch.setY(zahlRechts);
this.threadstart();
}
}
public void init(){
JPanel panelunten = new JPanel();
this.setSize(800, 400);
this.setLayout(null);
// Objekte erzeugen
textUnten = new JTextField("2",5);
textRechts = new JTextField("3",5);
unten = new JLabel("unten:");
rechts = new JLabel("rechts:");
start = new JButton("Start");
//Tisch zeichnen
getContentPane().add(tisch);
tisch.setBounds(getWidth()/4, getHeight()/4, getWidth()/2, getHeight()/2);
start.addActionListener(this);
panelunten.add(textUnten);
panelunten.add(unten);
panelunten.add(textRechts);
panelunten.add(rechts);
panelunten.add(start);
panelunten.setLayout(new FlowLayout());
panelunten.setBounds(0,getHeight()-40,getWidth(),40);
getContentPane().add(panelunten);
}
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}