-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Collision detection in class Turtle #75
Comments
Die Methode |
Okay, mit Deiner Erklärung macht die vorhandene Implementierung von Die von dir vorgeschlagene Implementierung von Ziel der Unterrichtseinheit ist nämlich das vollständige Snake-Spiel selbst, bei dem 2 Spieler gegeneinander spielen: der eine steuert seine (rote) Schlange snake1 mit "a" und "d", der andere seine (weiße) Schlange snake2 mit "Cursor up" und "Cursor down". Dieses Problem würde die vorgeschlagene Methode class Snake extends Turtle {
String left;
String right;
String name;
Snake(int x, int y, int startDirection, String name, String left, String right, Color color) {
super(x, y);
this.left = left;
this.right = right;
this.name = name;
this.setAngle(startDirection);
this.setBorderColor(color);
}
void act() {
this.forward(3);
}
void onKeyDown(String key) {
if(key == this.left) {
this.turn(90);
}
if(key == this.right) {
this.turn(90);
}
}
}
class Game extends Group {
Snake p1;
Snake p2;
Line r;
Game() {
p1 = new Snake(50, 300, 0, "Hans", "a", "d", Color.red);
p2 = new Snake(550, 300, 180, "Susi", "CursorUp", "CursorDown", Color.white);
r = new Line(200, 10, 200, 500);
}
void act() {
if(p1.collidesWith(p2)) { // Kollisionserkennung funktioniert nicht
println("Aua1"); // funktioniert wohl nur für geschlossene Turtle-Figuren (closeAndFill(true))
}
if(p1.collidesWith(r)) { // zum Test: Kollision mit Linie wird erkannt
println("AuaLinie");
}
}
}
new Game(); Bemerkungen zum Code:
Für meine Zwecke würde man eine Methode benötigen, mit der man prüfen kann, ob der Kopf von z.B. snake2 auf eine rote Farbe trifft. |
An die zweite Snake habe ich bei meiner Antwort nicht gedacht - das ist mir peinlich! Den Border zu berücksichtigen ist recht aufwändig, weil seine Gestalt sich bei einigen Figuren nicht einfach einheitlich aus dem HitPolygon berechnen lässt (z.B. RoundedRectangle oder Ellipse). Bei der Turtle ergibt sich zusätzlich die Schwierigkeit, dass jede Teilstrecke eine eigene Farbe und Strichdicke haben kann. Relativ einfach wäre noch eine auf die Turtle beschränkte Lösung zu schaffen, etwa durch eine Methode |
Ich habe die Methode Unten anliegend das Testprogramm von Dir, etwas erweitert. Im Konstruktor von Snake empfiehlt es sich übrigens, die Methode Ich hoffe, dass sich das Snake-Spiel mithilfe der neuen Methoden realisieren lässt. Fall etwas nicht passt oder noch fehlt, schreib' bitte gerne!
|
Danke Dir für die schnelle Lösung - auch wenn es wohl nicht ganz einfach war. |
Ich habe versucht, ein einfaches Snake-Game mit der Klasse Turtle zu programmieren, s.u.
Dabei habe ich es nicht geschafft zu erkennen, wann die Schlange sich in den eigenen Schwanz beißt.
Evtl. ist die Methode
collidesWithFillColor(color)
fehlerhaft.Demonstration des Problems:
The text was updated successfully, but these errors were encountered: