Letzte Besprechung von Platz da! und Rekursion in Snake

Zu beginn der Stunde haben wir uns die Spielversionen einiger Schüler zum vorherigen Projekt „Platz da!“ angeschaut. Dabei ist ein Fehler bei Tim aufgefallen, den wir gemeinsam beheben konnten:

Dieses Attribut Ermöglicht es uns auf Methoden der Klasse Warteschlange zuzugreifen. Ist jedoch nicht definiert, auf welchen Typ sich die Warteschlange bezieht, also kann das System nicht erkennen, von welcher Klasse die Objekte sind, die wir für unsere Warteschlange benutzen wollen. Da das in unserem Fall Objekte der Klasse Personen, wird diese Klasse auch als Typ-Parameter angegeben, um uns einen Zugriff auf die Methoden und Konstruktor der Klasse Personen zu ermöglichen.

Das Problem, das Tim nun hatte war, dass der rot unterstrichene Teil des Attributs weggelassen wurde. Dadurch war nicht klar definiert, dass nur Personen Teil der Schlange sein können. Abgespeichert wurden die Startpersonen nämlich als String, die Personen, die erst Später als Ersatz eingefügt werden, als Personen. Und da String nicht gleich Personen ist, wurde jegliche Eingabe nach den Startpersonen als falsch gewertet.

Mit dem beschränken der Warteschlange auf den Typ Personen, konnte dieser Fehler jedoch schnell behoben werden. <Personen> sollte im übrigen sowohl bei den Attributen als auch beim erzeugen einer Warteschlange im Konstruktor mit dazu geschrieben werden, auch wenn letzteres auch ohne funktioniert.

Snake und Rekursion:

Nachdem wir mit dem Projekt „Platz da!“ abgeschlossen hatten, begannen wir mit dem Spiel Snake. Genauer betrachteten wir hierbei die Spiellogik rund um die Bewegung und Hinzufügen eines neuen Schlangenelements.

Bewegen:

Um das Bewegen so einfacher zu Gestalten wird die Person hinter einer anderen Person steht, zuerst auf das Feld des Vordermanns rücken, bevor der Vordermann selbst rückt. Jedoch kennt der „Kopf“ der Schlange, in diesem Fall das rote Männchen, nur seinen direkten Hintermann, nämlich die 2, welcher wiederum nur nur die 3 kennt. Will man also in diesem Fall die Schlange um 1 nach vorne bewegen, und man würde als erstes 2 auf das Feld von 1 rücken lassen, hätte man ein Problem, da 4 und 3 somit nicht mehr rücken könnten. Daher muss der Befehl „Bewegen“ durch die ganze Schlange weitergegeben werden, bis zu dem Teil, bei dem next = null ist. In unserem Fall ist das bei der 4 der Fall und die 4 würde sich auf Position 3 begeben. Die 3 würde dann von Position 3 auf Position 2 Wechseln und die 2 genauso. Ganz zum Schluss rückt dann auch die 1 auf eine neue Position und wir haben die ganze Schlange bewegt.

Hinzufügen

Beim Spiel selbst ist es so, dass die Schlange um ein Element vergrößert wird, wenn diese einen Apfel isst. Das neue Element wird dann hinten angehängt. Das Prinzip, welches hier angewendet wird ist das gleiche, wie beim Bewegen. Der Kopf weiß nicht wie viele Schlangenelemente es gibt, er kennt nur erster, also seinen Hintermann, welcher eben wieder nur seinen Hintermann als next kennt. Gelöst werden kann dieses Problem beispielsweise durch eine while-Schleife oder aber auch auf die selbe Art, wie das Problem beim Bewegen.

Dieses Verfahren, welches vor allem bei Bewegen eingesetzt wurde, um das Problem zu lösen, nennt man Rekursion!

Schreibe einen Kommentar