Il mio obbiettivo sarebbe quello di creare una Applet che raffigura una pallina che rimbalza perpetuamente sulle pareti dello schermo. Purtroppo l'algoritmo che ho fatto funziona solo per certi valori della posizione iniziale della pallina e della direzione iniziale. Infatti, per farvi capire, nel codice postato ho messo questi valori costanti. E infatti, con questi valori, non funziona! L'idea però sarebbe di immettere le coordinate della pallina e la direzione in modo casuale, utilizzando la classe Random.
Non riesco proprio a vedere la falla in questo algoritmo.
Grazie dell'aiuto che mi darete .
codice:
import java.awt.*;
import java.applet.*;
import java.util.Random;
public class Rimbalzo extends Applet implements Runnable{
Random gnc=new Random();
Palla pallina;
double incremento=1.;
double mRetta,qRetta;
public void init(){
pallina=new Cerchietto(30, new Point(50,50),Color.blue);
do{
mRetta=(pallina.getCentro().getY()-70)/(pallina.getCentro().getX()-35);
}
while(mRetta==Double.NEGATIVE_INFINITY||mRetta==Double.POSITIVE_INFINITY||
mRetta==0); // ciclo se mRetta è casuale
qRetta=-mRetta*pallina.getCentro().getX()+pallina.getCentro().getY();
}
public void start(){
Thread t=new Thread(this);
t.start();
}
public void run() {
double x,y;
for(; ; ){
try{
Thread.sleep(5);
}
catch (InterruptedException e) {}
if(pallina.getCentro().getX()==getSize().width-pallina.getDiametro()/2
||pallina.getCentro().getX()==pallina.getDiametro()/2){
mRetta=-mRetta;
incremento=-incremento;
}
if (pallina.getCentro().getY()==getSize().getHeight()- pallina.getDiametro()/2
||pallina.getCentro().getY()==pallina.getDiametro()/2)
{
mRetta=-mRetta;
}
x=pallina.getCentro().getX()+incremento;
qRetta=-mRetta*pallina.getCentro().getX()+pallina.getCentro().getY();
y=x*mRetta+qRetta;
pallina.setPosizione(new Point((int)x,(int)y));
repaint();
}
}
public void paint(Graphics g){
pallina.disegna(g);
}
}
Questa è la classe palla:
codice:
import java.awt.*;
public class Palla {
int diametro, xCorner, yCorner;
Color colore;
Point centro;
public Cerchietto(int _diametro, Point _centro, Color _colore ){
diametro=_diametro;
centro=_centro;
xCorner = (int)centro.getX() - diametro / 2;
yCorner = (int)centro.getY() - diametro / 2;
colore=_colore;
}
public void disegna(Graphics g){
g.setColor(colore);
g.fillOval(xCorner,yCorner,diametro,diametro);
}
public void setPosizione(Point _centro){
centro=_centro;
xCorner = (int)centro.getX() - diametro / 2;
yCorner = (int)centro.getY() - diametro / 2;
}
public void setDiametro(int _diametro){
diametro=_diametro;
}
public Point getCentro(){
return centro;
}
public int getDiametro(){
return diametro;
}
}