# Abprallbedingung bei Breakout



## LittleWulf (3. Jul 2005)

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.


```
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


----------



## Soulfly (3. Jul 2005)

Du beantwortest im letzten Satz dein Problem ganz alleine.
Wenn der Ball in den Block eindringt gibt es ein Problem, klar!

Versuch also den Ball nach einem Aufprall vor den Stein zu setzen (Physikalisch sowieso richtig)

Mfg Soulfly


----------



## byte (3. Jul 2005)

nur ein kleiner hinweis: methoden-namen beginnen i.d.r. mit einem kleinen buchstaben!


----------



## LittleWulf (4. Jul 2005)

@ byto

bei mir nicht  :noe:


----------



## LittleWulf (4. Jul 2005)

wie kann ich mehrere variablen zurückgeben? muss ich dann für den versetzten ball eine neue methode schreiben?
oder kann ich das auch in Prallen reinmachen. mein problem ist, dass ich diese Variable in der Klasse Steuerung brauche und die KLasse Steuerung schon ein Objekt von Abprallen gebildet hat.


----------



## Soulfly (4. Jul 2005)

Ich hab jetzt kein Bock mir den ganzen Code durchzugucken.
Also:
Du versetzt den Ball (X,Y) nachdem ein Aufprall entdeckt wurde. einfach x=davorX y=davorY
und fertig. Wo du das hinschreibst musst du wissen. Du kennst deinen Code besser!

PS: Methoden Namen werden am Anfang klein geschrieben. Wenn du das mal berufl. machst, dann mist, mach es gleich richtig dann gibt es kein Problem.


----------



## LittleWulf (4. Jul 2005)

ok habs so weit, es funktioniert so weit und ich kann s morgen abgeben 

danke für die hilfe


----------

