ich wollte heute ein app programmieren das eine bestimmte anzahl von bällen in einem raum "herumschießt".(auch gegenseitige berührung soll möglich sein)
nun habe ich hier das app jedoch bewegen sich die bälle so gar nicht nach meinem geschmack^^:lol:
hoffe ihr könnt mir sagen welchen fehler ich gemacht habe.

schon im voraus danke
nun habe ich hier das app jedoch bewegen sich die bälle so gar nicht nach meinem geschmack^^:lol:
Java:
package ballphysic;
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
public class BallPhysic extends Applet implements Runnable{
private Image dbImage;
private Graphics dbg;
private int appletsize_x=350;
private int appletsize_y=200;
private int radius=30;
Ball [] b;
private int number_Balls=2;
public void start(){
b=new Ball[number_Balls];
for(int i=0;i<b.length;i++){
b[i]=new Ball();
b[i].init(appletsize_x, appletsize_y, radius);
}
Thread th=new Thread(this);
th.start();
}
public void run() {
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
while(true){
try{
Thread.sleep(10);
}catch(Exception e){
System.out.print(e);
}
for(int i=0;i<b.length;i++){
//bewegen
b[i].moveBall();
}
for(int i=0;i<b.length;i++){
//randabfrage
int y=b[i].get_y_Pos();
int x=b[i].get_x_Pos();
if(x<0){
b[i].rejectX();
b[i].resetX(false);
}else if(x>appletsize_x-radius){
b[i].rejectX();
b[i].resetX(true);
}else if(y<0){
b[i].rejectY();
b[i].resetY(false);
}else if(y>appletsize_y-radius){
b[i].rejectY();
b[i].resetY(true);
}
//ballabfrage
for(int j=0;j<b.length;j++){
int x2=b[j].get_x_Pos();
int y2=b[j].get_y_Pos();
if(j==i){
continue;
}
if((x+radius>=x&&x2<=x+radius)){
b[i].rejectX();
b[j].rejectX();
}
if(y2+radius>=y&&y2<=y+radius){
b[i].rejectY();
b[j].rejectY();
}
}
//repaint
repaint();
}
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}
public void paint(Graphics g){
for(int i=0;i<b.length;i++){
g.fillOval(b[i].get_x_Pos(),b[i].get_y_Pos(),radius,radius);
}
}
public void update (Graphics g){
// Initialisierung des DoubleBuffers
if (dbImage == null)
{
dbImage = createImage (this.getSize().width, this.getSize().height);
dbg = dbImage.getGraphics ();
}
// Bildschirm im Hintergrund löschen
dbg.setColor (getBackground ());
dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
// Auf gelöschten Hintergrund Vordergrund zeichnen
dbg.setColor (getForeground());
paint (dbg);
// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
g.drawImage (dbImage, 0, 0, this);
}
}
----------------------------------------------------------------------------------------------
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ballphysic;
/**
*
* @author Flo
*/
class Ball {
private double x_speed,y_speed;
private int x_pos,y_pos;
private int appletsize_x,appletsize_y;
public void init(int x,int y,int r){
appletsize_x=x;
appletsize_y=y;
//while(x_speed==0||y_speed==0){
x_speed=(int)(Math.random()*8-4);
y_speed=(int)(Math.random()*8-4);
//}
x_pos=(int)(Math.random()*(appletsize_x-r)+10);
y_pos=(int)(Math.random()*(appletsize_y-r)+10);
}
public void resetX(boolean choose){
if(!choose){
x_pos=0;
}else{
x_pos=appletsize_x;
}
}
public void resetY(boolean choose){
if(!choose){
y_pos=0;
}else{
y_pos=appletsize_y;
}
}
public void rejectX(){
x_speed=-x_speed;
}
public void rejectY(){
y_speed=-y_speed;
}
public void moveBall(){
x_pos+=x_speed;
y_pos+=y_speed;
}
public int get_x_Pos(){
return x_pos;
}
public int get_y_Pos(){
return y_pos;
}
}
hoffe ihr könnt mir sagen welchen fehler ich gemacht habe.
schon im voraus danke