Hi,
ich programmier im mom auch Breakout und da hab ich eine Problem mit der Abprallbedingung.
ich hab das Level abhängig von den erziehlten treffern gemacht d.h. ich bekomm meistens zuviele treffer und einige klötze sind noch nicht zerstört, aber man kommt trozdem in das 2. level.
kann mir jemand einen tipp geben? ich denke es liegt daran, dass der ball zu weit in ein klotz eindringt und beim nächsten schleifen durchlauf immernoch drin ist und dadurch zweimal zählt.
mfg littlewulf
ich programmier im mom auch Breakout und da hab ich eine Problem mit der Abprallbedingung.
ich hab das Level abhängig von den erziehlten treffern gemacht d.h. ich bekomm meistens zuviele treffer und einige klötze sind noch nicht zerstört, aber man kommt trozdem in das 2. level.
Code:
public class Abprallen {
Zeichne k;
int h = 20; //Höhe von Klotz in Level 1
int b = 30; //Breite von Klotz in Level 1
int h1 = 40; //Höhe von Klotz in Level 2
int b1 = 60; //Breite von Klotz in Level 2
int treffer = 2; //Treffer die beötigt werden um Klotz zu zerstören
int treffer2 = 5;
int zaehler2 =0; //Punkte Zähler für den einzelnen Klotz
int zaehler=0;
Color c = new Color(0,255,0); //Farben Grün
Color c1 = new Color (255,0,0); //Rot
Color c2 = new Color (0,0,255); //Blau
Color c3 = new Color (0,0,0); //Schwarz
Color c4 = new Color (255,255,255); //Weiß
boolean ganz = true; //Zustand von einem Klotz bei false ist er kaputt
public Abprallen(){
k = new Zeichne();
}
public void Klotz2(int x, int y, int x1,int y1,int vy, int vx, int r){ //Klotz Level 2
if(treffer2<=0){ganz=false;k.loescheRechteck(x1,y1,h,b);k.loescheumRechteck (x1,y1,h,b);}
if(treffer2==1){
k.maleRechteck(x1,y1,h1,b1,c);
k.umRechteck(x1,y1,h1,b1);
if((y>=y1-r&&y<=y1+h1+r)&&(x>x1&&x<x1+h1)&& zaehler2 <=5){treffer2--;zaehler2++;}
if((x>=x1-r&&x<=x1+b1+r)&&(y>y1&&y<y1+b1)&& zaehler2 <=5){treffer2--;zaehler2++;}
}
if(treffer2==2){
k.maleRechteck(x1,y1,h1,b1,c1);
k.umRechteck(x1,y1,h1,b1);
if((y>=y1-r&&y<=y1+h1+r)&&(x>x1&&x<x1+h1)&& zaehler2 <=4){treffer2--;zaehler2++;}
if((x>=x1-r&&x<=x1+b1+r)&&(y>y1&&y<y1+b1)&& zaehler2 <=4){treffer2--;zaehler2++;}
}
if(treffer2==3){
k.maleRechteck(x1,y1,h1,b1,c2);
k.umRechteck(x1,y1,h1,b1);
if((y>=y1-r&&y<=y1+h1+r)&&(x>x1&&x<x1+h1)&& zaehler2 <=3){treffer2--;zaehler2++;}
if((x>=x1-r&&x<=x1+b1+r)&&(y>y1&&y<y1+b1)&& zaehler2 <=3){treffer2--;zaehler2++;}
}
if(treffer2==4){
k.maleRechteck(x1,y1,h1,b1,c3);
k.umRechteck(x1,y1,h1,b1);
if((y>=y1-r&&y<=y1+h1+r)&&(x>x1&&x<x1+h1)&& zaehler2 <=2){treffer2--;zaehler2++;}
if((x>=x1-r&&x<=x1+b1+r)&&(y>y1&&y<y1+b1)&& zaehler2 <=2){treffer2--;zaehler2++;}
}
if(treffer2==5){
k.maleRechteck(x1,y1,h1,b1,c4);
k.umRechteck(x1,y1,h1,b1);
if((y>=y1-r&&y<=y1+h1+r)&&(x>x1&&x<x1+h1)&& zaehler2 <=1){treffer2--;zaehler2++;}
if((x>=x1-r&&x<=x1+b1+r)&&(y>y1&&y<y1+b1)&& zaehler2 <=1){treffer2--;zaehler2++;}
}
}
public void Klotz(int x, int y, int x1,int y1,int vy, int vx, int r){ //Klotz Level 1
if(treffer<=0){ganz=false;k.loescheRechteck(x1,y1,h,b);k.loescheumRechteck (x1,y1,h,b);}
if(treffer==1){
k.maleRechteck(x1,y1,h,b,c1);
k.umRechteck(x1,y1,h,b);
if((y>=y1-r&&y<=y1+h+r)&&(x>x1&&x<x1+h)&& zaehler <=2){treffer--;zaehler++;}
if((x>=x1-r&&x<=x1+b+r)&&(y>y1&&y<y1+b)&& zaehler <=2){treffer--;zaehler++;}
}
if(treffer==2){
k.maleRechteck(x1,y1,h,b,c);
k.umRechteck(x1,y1,h,b);
if((y>=y1-r&&y<=y1+h+r)&&(x>x1&&x<x1+h)&& zaehler <=1){treffer--;zaehler++;}
if((x>=x1-r&&x<=x1+b+r)&&(y>y1&&y<y1+b)&& zaehler <=1){treffer--;zaehler++;}
}
}
public int Prallenx(int x, int y, int x1,int y1, int vx, int r){ //Umkehren der X Richtung bei Klotz
if(ganz==true){
if((x>=x1-r&&x<=x1+b+r)&&(y>y1&&y<y1+b)){vx=-vx;}
}
return vx;}
public int Pralleny(int x, int y, int x1,int y1, int vy, int r){ //Umkehren der Y Richtung bei Klotz
if(ganz==true){
if((y>=y1-r&&y<=y1+h+r)&&(x>x1&&x<x1+h)){vy=-vy;}
}
return vy;}
public int Prallenx2(int x, int y, int x1,int y1, int vx, int r){//Umkehren der X Richtung bei Klotz 2
if(ganz==true){
if((x>=x1-r&&x<=x1+b1+r)&&(y>y1&&y<y1+b1)){vx=-vx;}
}
return vx;}
public int Pralleny2(int x, int y, int x1,int y1, int vy, int r){//Umkehren der Y Richtung bei Klotz 2
if(ganz==true){
if((y>=y1-r&&y<=y1+h1+r)&&(x>x1&&x<x1+h1)){vy=-vy;}
}
return vy;}
public int u(){return zaehler;} // Rückgabe von Zähler Level 1
public int u2(){return zaehler2;} // Rückgabe von Zähler Level 2
}
kann mir jemand einen tipp geben? ich denke es liegt daran, dass der ball zu weit in ein klotz eindringt und beim nächsten schleifen durchlauf immernoch drin ist und dadurch zweimal zählt.
mfg littlewulf