Hallo,
erstmal, den Thread bitte nicht schießen.
Aufgabe:
Es sollen die Befehle take, drop und status hinzugefügt werden.
Immer noch das Spiel Zuul.
Damit halt Gegenstände aufgenommen und abgelegt werden können.
Bzw. soll ausgeben werden wieviele Gegenstände man bei sich trägt.
Klasse Spiel:
Klasse Spieler:
Leider bekomm ich die Fehlermeldung nicht weg.
https://imgur.com/a/AoPqn
Die Methoden sind wohl nicht ganz richtig, wie schreibe ich sie richtig?
Was ist falsch und warum?
Und wie kommt die Fehlermeldung weg?
Wenn die Methoden richtig sind, werde ich versuchen sie aufzurufen.
erstmal, den Thread bitte nicht schießen.
Aufgabe:
Es sollen die Befehle take, drop und status hinzugefügt werden.
Immer noch das Spiel Zuul.
Damit halt Gegenstände aufgenommen und abgelegt werden können.
Bzw. soll ausgeben werden wieviele Gegenstände man bei sich trägt.
Klasse Spiel:
Code:
/**
* Dies ist die Hauptklasse der Anwendung "Die Welt von Zuul".
* "Die Welt von Zuul" ist ein sehr einfaches, textbasiertes
* Adventure-Game. Ein Spieler kann sich in einer Umgebung bewegen,
* mehr nicht. Das Spiel sollte auf jeden Fall ausgebaut werden,
* damit es interessanter wird!
*
* Zum Spielen muss eine Instanz dieser Klasse erzeugt werden und
* an ihr die Methode "spielen" aufgerufen werden.
*
* Diese Instanz dieser Klasse erzeugt und initialisiert alle
* anderen Objekte der Anwendung: Sie legt alle Räume und einen
* Parser an und startet das Spiel. Sie wertet auch die Befehle
* aus, die der Parser liefert und sorgt für ihre Ausführung.
*
* @author Michael Kölling und David J. Barnes
* @version 31.07.2011
*/
import java.util.ArrayList;
class Spiel
{
private Parser parser;
private Raum aktuellerRaum;
private Gegenstand aktuellerGegenstand;
private ArrayList<Gegenstand> gegenstaende;
private Gegenstand buch;
private Gegenstand computer;
private Spieler spieler;
private String gegenstand;
private String Gegenstand;
/**
* Erzeuge ein Spiel und initialisiere die interne Raumkarte.
*/
public Spiel()
{
raeumeAnlegen();
parser = new Parser();
}
/**
* Erzeuge alle Räume und verbinde ihre Ausgänge miteinander.
*/
private void raeumeAnlegen()
{
Raum draussen, hoersaal, cafeteria, labor, buero, keller;
// die Räume erzeugen
draussen = new Raum("vor dem Haupteingang der Universität");
hoersaal = new Raum("in einem Vorlesungssaal");
cafeteria = new Raum("in der Cafeteria der Uni");
labor = new Raum("in einem Rechnerraum");
buero = new Raum("im Verwaltungsbüro der Informatik");
keller = new Raum("im Keller");
// die Ausgänge initialisieren
draussen.setzeAusgang("east", hoersaal);
draussen.setzeAusgang("south", labor);
draussen.setzeAusgang("west", cafeteria);
hoersaal.setzeAusgang("west", draussen);
cafeteria.setzeAusgang("east", draussen);
labor.setzeAusgang("north", draussen);
labor.setzeAusgang("east", buero);
buero.setzeAusgang("west", labor);
buero.setzeAusgang("down", keller);
keller.setzeAusgang("up", buero);
//Gegenstände erzeugen
buch = new Gegenstand("Buch", 150);
computer = new Gegenstand("Computer", 1500);
keller.addGegenstand(buch);
buero.addGegenstand(computer);
aktuellerRaum = draussen; // das Spiel startet draussen
}
/**
* Die Hauptmethode zum Spielen. Läuft bis zum Ende des Spiels
* in einer Schleife.
*/
public void spielen()
{
willkommenstextAusgeben();
// Die Hauptschleife. Hier lesen wir wiederholt Befehle ein
// und führen sie aus, bis das Spiel beendet wird.
boolean beendet = false;
while (! beendet) {
Befehl befehl = parser.liefereBefehl();
beendet = verarbeiteBefehl(befehl);
}
System.out.println("Danke für dieses Spiel. Auf Wiedersehen.");
}
private void umsehen()
{
System.out.println(aktuellerRaum.gibLangeBeschreibung());
System.out.println(aktuellerRaum.gibGegenstaendeAlsString());
}
private void essen()
{
System.out.println(aktuellerRaum.gibEssensBeschreibung());
}
private void befehlTake()
{
System.out.println(spieler.gegenstandAufnehmen(gegenstand()));
}
public String gegenstand()
{
return gegenstand;
}
private void rauminfoAusgeben()
{
System.out.println("Sie sind " + aktuellerRaum.gibBeschreibung());
System.out.print("Ausgänge: ");
if (aktuellerRaum.gibAusgang("north") != null) {
System.out.print("north ");
}
if(aktuellerRaum.gibAusgang("east") != null) {
System.out.print("east ");
}
if(aktuellerRaum.gibAusgang("south") != null) {
System.out.print("south ");
}
if(aktuellerRaum.gibAusgang("west") != null) {
System.out.print("west ");
}
System.out.println();
}
/**
* Einen Begrüßungstext für den Spieler ausgeben.
*/
private void willkommenstextAusgeben()
{
System.out.println();
System.out.println("Willkommen zu Zuul!");
System.out.println("Zuul ist ein neues, unglaublich langweiliges Spiel.");
System.out.println("Tippen sie 'help', wenn Sie Hilfe brauchen.");
System.out.println();
System.out.println(aktuellerRaum.gibLangeBeschreibung());
}
/**
* Verarbeite einen gegebenen Befehl (führe ihn aus).
* @param befehl Der zu verarbeitende Befehl.
* @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
*/
private boolean verarbeiteBefehl(Befehl befehl)
{
boolean moechteBeenden = false;
if(befehl.istUnbekannt()) {
System.out.println("Ich weiss nicht, was Sie meinen...");
return false;
}
String befehlswort = befehl.gibBefehlswort();
if (befehlswort.equals("help")) {
hilfstextAusgeben();
}
else if (befehlswort.equals("go")) {
wechsleRaum(befehl);
}
else if (befehlswort.equals("look")) {
umsehen();
}
else if (befehlswort.equals("eat")) {
essen();
}
else if (befehlswort.equals("take")) {
befehlTake();
}
else if (befehlswort.equals("quit")) {
moechteBeenden = beenden(befehl);
}
// ansonsten: Befehl nicht erkannt.
return moechteBeenden;
}
// Implementierung der Benutzerbefehle:
/**
* Gib Hilfsinformationen aus.
* Hier geben wir eine etwas alberne und unklare Beschreibung
* aus, sowie eine Liste der Befehlswörter.
*/
private void hilfstextAusgeben()
{
System.out.println("Sie haben sich verlaufen. Sie sind allein.");
System.out.println("Sie irren auf dem Unigelände herum.");
System.out.println();
System.out.println("Ihnen stehen folgende Befehle zur Verfügung:");
parser.zeigeBefehle();
}
/**
* Versuche, in eine Richtung zu gehen. Wenn es einen Ausgang gibt,
* wechsele in den neuen Raum, ansonsten gib eine Fehlermeldung
* aus.
*/
private void wechsleRaum(Befehl befehl)
{
if(!befehl.hatZweitesWort()) {
// Gibt es kein zweites Wort, wissen wir nicht, wohin...
System.out.println("Wohin möchten Sie gehen?");
return;
}
String richtung = befehl.gibZweitesWort();
// Wir versuchen, den Raum zu verlassen.
Raum naechsterRaum = aktuellerRaum.gibAusgang(richtung);
if (naechsterRaum == null) {
System.out.println("Dort ist keine Tür!");
}
else {
aktuellerRaum = naechsterRaum;
System.out.println(aktuellerRaum.gibLangeBeschreibung());
}
}
/**
* "quit" wurde eingegeben. Überprüfe den Rest des Befehls,
* ob das Spiel wirklich beendet werden soll.
* @return 'true', wenn der Befehl das Spiel beendet, 'false' sonst.
*/
private boolean beenden(Befehl befehl)
{
if(befehl.hatZweitesWort()) {
System.out.println("Was soll beendet werden?");
return false;
}
else {
return true; // Das Spiel soll beendet werden.
}
}
}
Klasse Spieler:
Code:
/**
* Beschreiben Sie hier die Klasse Spieler.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
import java.util.ArrayList;
import java.util.HashMap;
public class Spieler
{
// Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
private int x;
private String name;
private Raum aktuellerRaum;
private ArrayList<Gegenstand> gegenstaende;
private HashMap<String, Raum> ausgaenge;
private String vorhandenerGegenstand;
private String Gegenstand;
private String gegenstand;
/**
* Konstruktor für Objekte der Klasse Spieler
*/
public Spieler(String beschreibung)
{
gegenstaende = new ArrayList<Gegenstand>();
ausgaenge = new HashMap<String, Raum>();
// Instanzvariable initialisieren
x = 0;
}
public String gegenstand()
{
return gegenstand;
}
public void gegenstandAufnehmen (Gegenstand gegenstand){
for(Gegenstand aktuellerGegenstand: gegenstaende){
if(aktuellerGegenstand.gibBeschreibung() == gegenstand.gibBeschreibung() ){
System.out.println("Es existiert bereits ein Gegenstand mit diesem Namen!");
return;
}
}
gegenstaende.add(gegenstand);
}
public void status()
{
for(Gegenstand aktuellerGegenstand: gegenstaende){
System.out.println(aktuellerGegenstand.toString());
}
}
public void gegenstandAblegen()
{
if(gegenstand > 0) {
gegenstand--;
}
else {
System.out.println(
"Versuch Gegenstand abzulegen");
}
}
}
Leider bekomm ich die Fehlermeldung nicht weg.
https://imgur.com/a/AoPqn
Code:
public void gegenstandAufnehmen (Gegenstand gegenstand){
for(Gegenstand aktuellerGegenstand: gegenstaende){
if(aktuellerGegenstand.gibBeschreibung() == gegenstand.gibBeschreibung() ){
System.out.println("Es existiert bereits ein Gegenstand mit diesem Namen!");
return;
}
}
gegenstaende.add(gegenstand);
}
public void status()
{
for(Gegenstand aktuellerGegenstand: gegenstaende){
System.out.println(aktuellerGegenstand.toString());
}
}
public void gegenstandAblegen()
{
if(gegenstand > 0) {
gegenstand--;
}
else {
System.out.println(
"Versuch Gegenstand abzulegen");
}
}
Die Methoden sind wohl nicht ganz richtig, wie schreibe ich sie richtig?
Was ist falsch und warum?
Und wie kommt die Fehlermeldung weg?
Wenn die Methoden richtig sind, werde ich versuchen sie aufzurufen.
Zuletzt bearbeitet: