04_Praktikum-1_Snake/Schlange.java

112 lines
2.6 KiB
Java
Raw Permalink Normal View History

2017-09-17 17:06:21 +02:00
import java.awt.Point;
import java.util.ArrayList;
2019-09-12 07:52:17 +02:00
import java.util.List;
2017-09-17 17:06:21 +02:00
/**
* Repraesentiert eine Schlange
*/
public class Schlange {
2019-09-12 07:52:17 +02:00
private List<Point> schlange;
2017-09-17 17:06:21 +02:00
/**
* Konstruiert eine Schlangen mit Startposition
2019-09-12 07:52:17 +02:00
* bei den angegebenen Koordinaten.
*
2017-09-17 17:06:21 +02:00
* @param x x-Koordinate der Schlangenposition
* @param y y-Koordinate der Schlangenposition
*/
public Schlange(int x, int y) {
2019-09-12 07:52:17 +02:00
schlange = new ArrayList<>();
2017-09-17 17:06:21 +02:00
schlange.add(new Point(x, y));
}
/**
* Prueft, ob die Schlange am bezeichneten Standort ist
2019-09-12 07:52:17 +02:00
*
2017-09-17 17:06:21 +02:00
* @param standort
* @return true, falls die Schlange am bezeichneten Standort ist
*/
public boolean istAufPunkt(Point standort) {
return schlange.contains(standort);
}
/**
* Prueft, ob der Schlangenkopf am bezeichneten Standort ist
2019-09-12 07:52:17 +02:00
*
2017-09-17 17:06:21 +02:00
* @param standort
* @return wahr, falls der Schlangenkopf am bezeichneten Standort ist
*/
public boolean istKopfAufPunkt(Point standort) {
return kopf().equals(standort);
}
/**
* Bewege die Schlange in die angegebene Richtung.
* Gueltige Richtungen sind:
2019-09-12 07:52:17 +02:00
* <p>
2017-09-17 17:06:21 +02:00
* w (oben)
* s (unten)
* a (links)
* d (rechts)
2019-09-12 07:52:17 +02:00
*
2017-09-17 17:06:21 +02:00
* @param richtung Richtung, in die sich die Schlange bewegen soll
*/
public void bewege(char richtung) {
Point kopf = kopf();
switch (richtung) {
2019-09-12 07:52:17 +02:00
case 'w':
schlange.add(new Point(kopf.x, kopf.y - 1));
schlange.remove(0);
break;
case 's':
schlange.add(new Point(kopf.x, kopf.y + 1));
schlange.remove(0);
break;
case 'a':
schlange.add(new Point(kopf.x - 1, kopf.y));
schlange.remove(0);
break;
case 'd':
schlange.add(new Point(kopf.x + 1, kopf.y));
schlange.remove(0);
break;
default:
System.out.println("Ungültige Taste");
2017-09-17 17:06:21 +02:00
}
}
/**
* Testet, ob der Kopf der Schlange auf dem Koerper liegt.
2019-09-12 07:52:17 +02:00
*
2017-09-17 17:06:21 +02:00
* @return true, falls der Kopf auf dem Koerper liegt
*/
public boolean istKopfAufKoerper() {
boolean istKopfAufKoerper = false;
2019-09-12 07:52:17 +02:00
for (int i = 0; i < schlange.size() - 2; i++) {
2017-09-17 17:06:21 +02:00
istKopfAufKoerper |= istKopfAufPunkt(schlange.get(i));
}
return istKopfAufKoerper;
}
/**
* Laesst die Schlange um eine Einheit laenger werden.
*/
public void wachsen() {
Point schwanz = schlange.get(0);
schlange.add(0, new Point(schwanz.x, schwanz.y));
}
/**
* Liefert die Position des Kopfs der Schlange zurueck.
2019-09-12 07:52:17 +02:00
*
2017-09-17 17:06:21 +02:00
* @return die aktuelle Position (Kopf) der Schlange
*/
public Point gibPosition() {
return kopf();
}
private Point kopf() {
2019-09-12 07:52:17 +02:00
return schlange.get(schlange.size() - 1);
2017-09-17 17:06:21 +02:00
}
}