# Inkball



## Joww (15. Mai 2010)

also leute, ich habe folgendes Problem:
ICh muss bis nächste woche ein Schulprojekt programmieren mit dem Titel Inkball (Windows Vista Game).
Es geht darum, dass ein Ball in ein Loch geführt werden muss, mithilfe von Linien die mit der Maus gezeichnet werden sollen.
Der Ball prallt an der Linie ab und auch an den Blöcken.

ich beschäftige mich schon mind einer woche mit der Abprallfunktion des Balles an den Blöcken und ich kriegs einfach nicht hin. Glaubt mir, ich bin wirklich keiner, der in iwelche Foren geht nur aus Faulheit oder sonst was, sondern weil meine Jahresnote daon abhängt und ich einfach nichtmehr weiter komm.
Ich hab folgenden Code bereits geschrieben und ich hoffe es kann mir wer weiterhelfen!


```
if (b.Overlaps(bl)) {
	                                       boolean down = (!(bl.getPosY() + bl.getSizeY() <= b.getPosY())) && ((bl.getPosX() + bl.getSizeX()  >= b.getPosX() + b.getSizeX()) && (bl.getPosX() <= b.getPosX() + b.getSizeX()));

						boolean up = (!(bl.getPosY() >= b.getPosY() + b.getSizeY())) && ((bl.getPosX() + bl.getSizeX() >= b.getPosX() + b.getSizeX()) && (bl.getPosX() <= b.getPosX() + b.getSizeX()));

						boolean right = (!(bl.getPosX() + bl.getSizeX() <= b.getPosX())) && ((bl.getPosY() + bl.getSizeY() >= b.getPosY() + b.getSizeY()) && (bl.getPosY()  <= b.getPosY() + b.getSizeY()));

						boolean left = (!(bl.getPosX() >= b.getPosX() + b.getSizeX())) && ((bl.getPosY() + bl.getSizeY() >= b.getPosY()) && (bl.getPosY() <= b.getPosY() + b.getSizeY()));
						
						if(down) {
							//System.out.println("DOWN");
							//b.dy = b.dy * (-1);							
							b.dy = -Math.abs(b.dy);
						}
						if(up) {
							//System.out.println ("UP");
							//b.dy = b.dy * (-1);
							b.dy = Math.abs(b.dy);
						}
						if(right) {
							//System.out.println("RIGHT");
							//b.dx = b.dx * (-1);
							b.dx = Math.abs(b.dx);
						}
						if(left) {
							//System.out.println("LEFT");
							//b.dx = b.dx * (-1);
							b.dx = -Math.abs(b.dx);
						}
					}



public boolean Overlaps(FBlock bl){
		return ((this.posY + this.sizeY > bl.getPosY()) && 
			(this.posY < bl.getPosY() + bl.getSizeX()) && 
			(this.posX + this.sizeX > bl.getPosX()) && 
			(this.posX < bl.getPosX() + bl.getSizeX()));
	}
[code=Java]

im obigen code steht bl für block und b für den ball.
bitte wenn mir wer helfen könnte wäre echt toll und wenn ich am kompletten Holzweg bin, dann gebt mir tipps wie mans noch machn kann.

im Voraus schonmal danke.
lg
```


----------



## Marco13 (15. Mai 2010)

_im obigen code steht bl für block und b für den ball._

Man könnte die Variablen ja auch einfach "block" und "ball" nennen 

Was funktioniert nicht, oder was genau ist die Frage?


----------



## Joww (15. Mai 2010)

okay stimmt x'D

ja meine frage ist, was ich an den berechnungen falsch ist, weil der ball nie richtig abprallt .__.
und ich weiß einfach ned wieso
ich habs schon mit freunden durchdacht und bins allein 100 mal durchgegangen, aber iwie will der einfach nicht


----------



## Marco13 (15. Mai 2010)

Ja, ist auch sehr chaotisch und schwer nachvollziehbar. Der Ball ist angegeben über Position und Größe? (Bei einem Ball würd's eigentlich der Radius tun...). Die Box is angegeben über Position und Größe? Ist die "Position" da die Mitte der Box oder die obere Linke Ecke?

Das dx und dy ist wohl die Bewegung ... ? 

```
//b.dy = b.dy * (-1);
b.dy = -Math.abs(b.dy);
```
War das "rumprobiert"? Eigentlich sollte das auskommentierte das richtige sein. Das mit dem "abs" macht ja nicht viel sinn...


----------



## joww (15. Mai 2010)

ja also die position sollte eig die linke obere ecke sein.
jop dx und dy ist die bewegung.

und ja ich wollts anfangs eh auch mit dem *(-1) machen, nur unser toller lehrer meinte ich muss es mit math.abs() machen -_-


----------

