Textadventure

kevkaaa

Neues Mitglied
Hallo Leutz,

das ist mein erstes Thema in diesem Forum.

ich bin ein Anfänger was Java-Programmierung angeht und versuche mich an einem Textadventure.

Jetzt ist es so, dass die jeweilige Anweisung nur einmal ausgeführt werden soll und anschließend soll das Programm wieder zu dem Anfang zurückkehren, wo der Spieler wieder angeben kann, in welche Richtung es gehen soll. Allerdings ist es aktuell so, dass wenn man z.B. auf "w" drückt, eine Endlosschleife in Gang gesetzt wird. :(

Ich bin für jede Antwort dankbar.

Hier ist der Code:
import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Scanner;



public class WowAdventure {



public static void main(String[] args) throws IOException {


Scanner sc = new Scanner(System.in);


System.out.println("Hallo");


System.out.println("Gebe dein Namen ein:");


String name = sc.nextLine();



System.out.println("Willkommen in der Welt von WOW" + name);

System.out.println("Verwende die Tasten 'N','O','S', und 'W', um dich zu bewegen, und 'I', un einen Blick in dein Inventar zu werfen.");

System.out.println("Mit 'Q' kannst du das Spiel verlassen");


BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


String Befehl;


Befehl = br.readLine();


while(Befehl != null) {


switch(Befehl.toLowerCase()) {


case "n": System.out.println("Du gehst nach Norden");break;

case "o": System.out.println("Du gehst nach Osten");break;

case "s": System.out.println("Du gehst nach Süden");break;

case "w": System.out.println("Du gehst nach Westen");break;

case "i": System.out.println("Dein Rucksack ist im Moment noch leer");break;

case "q": System.out.println("Möchtest du das Spiel wirklich verlassen?Y/N");

String bestätigung = br.readLine();

switch(bestätigung.toLowerCase()) {

case "y": System.out.println("Hau rein");

System.exit(0);break;

case "n": System.out.println("Du willst doch nicht gehen, das freut mich!");break;

}break;


case "": System.out.println("Du wilslt gar nichts machen? Das glaube ich nicht");break;


default: System.err.println("Das verstehe ich nicht");break;


}
}
}
}

lg Kevkaaa
 

Java xyrse123

Bekanntes Mitglied
Hallo,
die Endlooschleife kommt zustande, weil ein paar gescweifte Klammern falsch gesetzt sind. So könntest du es z.B machen:

Java:
 String Befehl;
  while (true) {
   Befehl = br.readLine();
 
switch (Befehl.toLowerCase()) {
  
case "n":
    System.out.println("Du gehst nach Norden");
    break;
  
case "o":
    System.out.println("Du gehst nach Osten");
    break;
  
case "s":
    System.out.println("Du gehst nach Süden");
    break;
  
case "w":
    System.out.println("Du gehst nach Westen");
    break;
  
case "i":
    System.out.println("Dein Rucksack ist im Moment noch leer");
    break;
   }
 
if (Befehl.equals("q")) { // Abruch
    System.out.println("Möchtest du das Spiel wirklich verlassen?Y/N");
    String bestätigung = br.readLine(); 
   
switch (bestätigung.toLowerCase()) {
   
case "y":
     System.out.println("Hau rein");
     System.exit(0);
     break;
   
case "n":
     System.out.println("Du willst doch nicht gehen, das freut mich!");
     break;
   
default: System.err.println("Das verstehe ich nicht");break;
     
    }
   }
  }
 

MoxxiManagarm

Top Contributor
Aus meiner Sicht sind alle Klammern richtig gesetzt,ich hab eden Code mal etwas formatiert:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;


public class WowAdventure {

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
       
        System.out.println("Hallo");
        System.out.println("Gebe dein Namen ein:");

        String name = sc.nextLine();

        System.out.println("Willkommen in der Welt von WOW" + name);
        System.out.println("Verwende die Tasten 'N','O','S', und 'W', um dich zu bewegen, und 'I', un einen Blick in dein Inventar zu werfen.");
        System.out.println("Mit 'Q' kannst du das Spiel verlassen");


        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String Befehl;
        Befehl = br.readLine();

        while(Befehl != null) {

            switch(Befehl.toLowerCase()) {
                case "n": System.out.println("Du gehst nach Norden"); break;
                case "o": System.out.println("Du gehst nach Osten"); break;
                case "s": System.out.println("Du gehst nach Süden"); break;
                case "w": System.out.println("Du gehst nach Westen"); break;
                case "i": System.out.println("Dein Rucksack ist im Moment noch leer"); break;
                case "q": System.out.println("Möchtest du das Spiel wirklich verlassen? Y/N");
                    String bestätigung = br.readLine();
                    switch(bestätigung.toLowerCase()) {
                        case "y": System.out.println("Hau rein"); System.exit(0); break;
                        case "n": System.out.println("Du willst doch nicht gehen, das freut mich!"); break;
                    } break;
                case "": System.out.println("Du wilslt gar nichts machen? Das glaube ich nicht"); break;
                default: System.err.println("Das verstehe ich nicht"); break;
            }
        }
    }
}

Die Enlosschleife kommt wegen
Java:
Befehl = br.readLine();
while(Befehl != null) {

Befehl wird vor der Schleife eingelesen und innerhalb der Schleife nicht wieder verändert.




Weitere Anmerkungen:
- Ich bin etwas verwirrt, warum hier Scanner und BufferedReader verwendet werden. Bitte entscheide dich für eins.
- Bitte schreibe variablen immer kleine. In deinem Fall ist 'Befehl' noch groß geschrieben.
- Vermeide Umlaute im Code, in deinem Fall betrifft das 'bestätigung'
 

kevkaaa

Neues Mitglied
Hey,

while((befehl = br.readLine()) != null) ... ---> So funktioniert's..

Ich danke euch vielmals für eure Ratschläge und Anmerkungen.

LG und ein entspanntes Weekend :)
 

Neue Themen


Oben