Hallo, liebe Leute!
Ihr wundert Euch bestimmt, wieso ich diese Frage als Anfängerthema einordne, aber ich bin tatsächlich Java-Anfänger (erst sei ca. 2,5 Monaten mit Java beschäftigt) und wurde gleich mit dieser Aufgabe konfrontiert, die mir sehr schwer erscheint, darum hoffe ich auf Eure Hilfe:
Hier das Interface Element, das uns bereitgestellt ist:
So, das ist die Aufgabe (die erste von dreien, aber die anderen beiden Aufgaben lasse ich weg, denn es erscheint mir an dieser Stelle utopisch, die restlichen Aufgaben auch noch hinzubekommen).
Edit1:
Was die Hierachie angeht, so wäre meine Idee, daß man eine Superklasse für Spielfigur und Monster schreibt (die kann man vielleicht "Teilnehmer" nennen) und eine Superklasse für Stein, Erde, Wand und Diamant (die kann man vielleicht "Hindernis" nennen).
Aber wie die konkreten Implementierungen aussehen, da habe ich noch keine wirkliche Idee.
Ihr wundert Euch bestimmt, wieso ich diese Frage als Anfängerthema einordne, aber ich bin tatsächlich Java-Anfänger (erst sei ca. 2,5 Monaten mit Java beschäftigt) und wurde gleich mit dieser Aufgabe konfrontiert, die mir sehr schwer erscheint, darum hoffe ich auf Eure Hilfe:
"In der folgenden Aufgabe sollt Ihr das Spiel Boulder Dash nachbauen. Boulder Dash ist ein Klassiker aus den 80-er Jahren. [...] Das Ziel des Spiels ist es, unter der Erde nach Diamanten zu suchen. Dazu muss der Spieler sich durch die Erde graben und dabei Monstern und fallenden Steinen ausweichen.
Es gibt folgende Spielelemente:
- Spielfigur: Die Spielfigur kann in jedem Spielzug entweder nach links, rechts, oben oder unten bewegt werden. Sie kann leere Felder direkt betreten. Wird die Spielfigur auf ein Feld mit Erde bewegt, so räumt sie die Erde weg und betritt dann das leere Feld (innerhalb eines Spielzugs!). Befindet sich auf dem Feld ein Diamant, so sammelt sie diesen ein. Wird sie auf den Ausgang bewegt, endet das Spiel bzw. die Spielstufe.
- Stein: Steine unterliegen der Schwerkraft, d.h. sie fallen nach unten, sofern sich unter ihnen
nichts befindet. Liegen die Steine auf einer Kante (d.h. unter ihnen befindet sich etwas, aber
links daneben und links darunter oder rechts daneben und rechts darunter nicht) so rutschen
sie nach links bzw. rechts. Befindet sich die Spielfigur unter einem Stein, so wird sie erschlagen
sofern der Stein bereits fällt, d.h. sich im Spielzug zuvor bereits bewegt hat.- Monster: Das Monster versucht die Spielfigur zu fressen. Es verfügt über eine extrem gute
Nase und weiß daher immer ungefähr wo sich die Spielfigur befindet. Auf Basis dieses Wissens
bewegt sich das Monster immer in Richtung der Spielfigur. Stößt es dabei auf ein Hindernis, so
versucht es dieses zu umgehen. Findet das Monster auf dem Weg einen Diamanten, wird dieser
zerstört. Das Monster kann sich nur auf leeren Feldern bewegen, also keine Erde wegräumen.- Erde: Erde ist ein Hindernis für Steine und Monster. Die Spielfigur kann sie wegräumen. Das
Wegräumen der Erde kostet allerdings 10 Punkte Abzug, jedoch nur, wenn bereits Punkte
vorhanden sind, d.h. der Punktestand kann nicht negativ werden.- Wand: Eine Wand ist ein unzerstörbares Hindernis. Das gesamte Spielfeld sollte von Wänden
umgeben sein.- Diamant: Das Aufsammeln eines Diamanten bringt 200 Punkte.
- leeres Feld: Die Spielfigur kann ohne Auswirkungen auf den Punktestand auf das leere Feld
bewegt werden.- Ausgang: Wird die Spielfigur auf den Ausgang bewegt, ist das Spiel bzw. die Spielstufe gewonnen.
Implementiert die oben beschriebenen Spielelemente als Klassen. Alle Elemente sollten das Interface Element, welches vorgegeben ist (s.u.), implementieren. Das Interface stellt zwei Methoden bereit:
- getChar: Jedes Element wird über einen bestimmten Character identifiziert (W= Wand, D= Diamant, P= Spieler, E= Erde, S= Stein, leer= leeres Feld, G= Ausgang). Diese
Methode soll den entsprechenden Char zurückgeben. Eine Instanz vom Typ Monster würde
also bei Aufruf 'M' zurückgeben.- performTurn: Diese Methode soll einen Spielzug des jeweiligen Elements ausführen. So würde
sich die Spielfigur zum Beispiel in die Richtung bewegen, die eingegeben wurde. Bei einer
Wand oder dem Diamant hat der Aufruf von performTurn logischerweise keinen Effekt.
Um den Spielfluss zu regulieren, sollte performTurn in jedem Zyklus auf der Spielfigur
und nur alle zehn Zyklen zusätzlich auf den anderen Elementen aufgerufen werden. Bei
diesem Wert handelt es sich nur um einen Richtwert, je nach gewünschter Spielgeschwindigkeit/
Schwierigkeit kann dieser Wert individuell angepasst werden.
Die Richtung, in die die Spielfigur bewegt wird, kann später mit Hilfe der GUI ermittelt werden.
Diese gibt bei Verwendung die gedrückte Taste zurück.
Die Bewegung des Monsters kann hier zufällig passieren. Es ist also nicht nötig, dass das Monster
sich wirklich in Richtung der Spielfigur bewegt.
Überlegt Euch vor Beginn der Implementierung eine sinnvolle Objekthierarchie für die
Elemente. Erläutert Eure Hierarchie mit Hilfe eines Diagramms.
Hier das Interface Element, das uns bereitgestellt ist:
Java:
/**
*
*/
public interface Element {
/**
* Every Element is identified by a special char.
* E.g. If this Element is Monster the method would return 'M'
*
* Valid return values are:
* 'P' Player
*
* ' ' Blank (empty cell)
*
* 'W' Wall
*
* 'S' Soil
*
* 'B' Boulder
*
* 'M' Monster
*
* 'D' Diamond
*
* 'G' Goal
*
* @return The char that identifies this Element.
*/
public char getChar();
/**
* Perform one turn.
*/
public void performTurn();
}
So, das ist die Aufgabe (die erste von dreien, aber die anderen beiden Aufgaben lasse ich weg, denn es erscheint mir an dieser Stelle utopisch, die restlichen Aufgaben auch noch hinzubekommen).
Edit1:
Was die Hierachie angeht, so wäre meine Idee, daß man eine Superklasse für Spielfigur und Monster schreibt (die kann man vielleicht "Teilnehmer" nennen) und eine Superklasse für Stein, Erde, Wand und Diamant (die kann man vielleicht "Hindernis" nennen).
Aber wie die konkreten Implementierungen aussehen, da habe ich noch keine wirkliche Idee.
Zuletzt bearbeitet von einem Moderator: