# Textadventure erstellen



## GrimmeL (27. Mrz 2014)

Hallo ihr lieben,
ich bin auf der Suche nach einer Opensoruce von einem Textadventure. Ich würde es dann bearbeiten wollen so wie ich es gerne hätte.

Bin noch neu in java und weiß noch nicht wie sich das ganze aufbaut. Würde es dann später wenn es fertig ist für Android als App zum laufen bringen.

Vielleicht kann mir ja der ein oder andere mit Informationen weiterhelfen. 

Mfg


----------



## Highchiller (27. Mrz 2014)

Ich halte es für sinnvoller du programmierst ohne Vorlage. Das ist bei Textadventures auch überhaupt nicht schwer.

Das schwerste an diesem Genre lässt sich in 2 Punkte gliedern.
1) Du musst gute Texte schreiben (keine Java-Kenntnisse nötig)
2) Du musst gute Texterkennung schreiben (Das ist schwierig, aber nicht großartig von Java-abhängig. Kann also auch mit wenigen Kenntnissen geschrieben werden)

Davon abgesehen, es gibt durchaus text-adventures die open source sind. Allerdings nicht in Java. Generell weiß ich nicht ob es überhaupt Text-Adventures in Java gibt 

Also es ist nicht schwer... Schau dir mal ein Tutorial namens Hello-World für Java an. Dann weißt du wie du text auf die Konsole bringst.
Dann gibts noch System.in und damit kannst du eingaben von der Konsole lesen.

Jetzt hast du schon alles was du brauchst für ein Text-Adventure ^^

PS: Ich glaub übrigens das erste große Text-Adventure überhaupt ist open-source  Es hieß "Colossal Cave Adventure"


----------



## Exorcist (28. Mrz 2014)

Highchiller hat gesagt.:


> Ich halte es für sinnvoller du programmierst ohne Vorlage. Das ist bei Textadventures auch überhaupt nicht schwer.
> 
> Das schwerste an diesem Genre lässt sich in 2 Punkte gliedern.
> 1) Du musst gute Texte schreiben (keine Java-Kenntnisse nötig)
> ...



Naja, es braucht schon noch etwas mehr. Zb. muss man wissen, wie man den Player in Räumen navigieren lassen kann usw.

Hier ein Textadventure Beispiel in Java :

Creating a text adventure game in Java


----------



## GrimmeL (28. Mrz 2014)

Die Typischen Einsteiger Tuts hab ich schon gelesen mit dem Hallo World und alles. Aber dennoch würd ich gern Wissen wie es aufgebaut ist das nun ein Gametext kommt und dann zb. 3 Auswahlmöglichkeiten für den Spieler & je nachdem für was er sich entscheidet, dann zum nächsten Text kommt wo es wieder 3 neue Auswahlmöglichkeiten gibt usw.

Das bsp. von Exorcist sieht doch schon mal gut aus, aber so richtig blicke ich da noch nicht durch. 

Edit:
Warum ich es halt gerne mit Java machen möchte ist, weil ich die Sprache lernen will um dann später auch eigenständige Apps schreiben zu können. Also in 10jahren wenn ich dann so weit bin ^^

Edit²:
Ich hatte die Hoffnung eine OpenSource zu finden wo man sehen kann wie das Spiel aufgebaut ist von Anfang bis Ende & dann eben daraus Schlüsse ziehen zu können wie das alles Funktioniert und dann mit Hilfe der Vorlage ein eigenes zu schreiben.


----------



## ARadauer (28. Mrz 2014)

GrimmeL hat gesagt.:


> Ich hatte die Hoffnung eine OpenSource zu finden wo man sehen kann wie das Spiel aufgebaut ist von Anfang bis Ende & dann eben daraus Schlüsse ziehen zu können wie das alles Funktioniert und dann mit Hilfe der Vorlage ein eigenes zu schreiben.



Sowas würde dich auf jeden Fall überfordern... versuchs einfach mal selber


----------



## GrimmeL (28. Mrz 2014)

ARadauer hat gesagt.:


> Sowas würde dich auf jeden Fall überfordern... versuchs einfach mal selber



Naja um es selber zu versuchen benötigt man ja einen Ansatz womit man Anfangen kann. Kann ja nicht munter drauf los schreiben ohne zu Wissen wie das eigentlich Funktioniert. ^^


----------



## Highchiller (28. Mrz 2014)

ARadauer hat schon Recht. Ich kenn das selbst ziemlich gut. Früher wollt ich immer Beispiele sehen damit ich Anfangen konnte, die waren dann aber sehr schnell viel zu kompliziert und konnten mir im Endeffekt kaum bis gar nicht helfen.

Diese Projekte sind einfach zu groß als das man da durchblicken kann. Auch erkennt man nicht welche Ansätze verwendet wurden, weil man sich erst mal tief einarbeiten muss um die Zusammenhänge zu begreifen.

Glaub uns also wenn wir dir sagen, es hilft dir nicht weiter großen Projekten über die Schulter zu schauen. Das bringt dir erst was wenn du genügend Java-Kenntnisse und theoretische Ansätze kennst.

Man sagt ja so schön, aller Anfang ist schwer.
Versuch dich mal an daran ein kleines Programm zu schreiben das dir einen Text schickt, du eine eingabe tätigst und dein Programm reagiert dann entsprechend auf diesen Text. Das ist nicht schwer.
Du wirst dann aber schnell feststellen, dass du auf die Art nicht wirklich größer wirst und dein Code nur noch unübersichtlicher. Bist du da angelangt hast du aber schon genug gelernt um neue Ansätze zu verfolgen. Das bedeutet nicht das dein Code nun weggeworfen werden kann. Stattdessen kannst du ihn optimieren.
Exorcist hat ja erwähnt, "wie kann man einen Player im Raum navigieren". Das sind dann Fragen die du dir selbst beantworten musst und damit wird dein Programm größer und größer. Später hast du eine richtige Welt, die der Spieler aber nicht sieht, sondern eben nur die Texte. Du als entwickler kennst aber Lage des Spielers, Gegenstände in seiner Nähe etc.

Du wirst dann merken dass es sinnvoll gewesen wäre erst mal die ganze welt zu erschaffen und dann den Spieler da durch zu lotsen. Da hilft dir schon Papier und Stift weiter. Mal ein labyrinth, erzähl eine geschichte anhand des weges den der Spieler geht. Mit monstern, rätseln, etc.
Wenn du das alles hast und dir durch die obigen fingerübungen einige Fähigkeiten in Java angeeignet hast, dann kannst du mit deinem eigenen text-adventure richtig los legen.


----------



## GrimmeL (29. Mrz 2014)

Also anhand zweier Videos weiß ich nun schon wie man den User Fragen stellt und wo er gleich die Fragen im Fenster beantworten kann. Danach verwendet er direkt die Informationen und gibt ihn als Text wieder aus.


Aber Lerninhalte wo nun gezeigt wird wie man einen Text ausgibt, dann der User 3 Auswahlmöglichkeiten bekommt & dann daraufhin eine Reaktion vom Programm erhält, hab ich leider noch nicht gefunden.

Das wäre ja genau das richtige was ich bräuchte.

Ich schaue mir gerade die Tutorials von Hendrik Schmidt durch, da geht er Themen für 1te Semester Informatik durch im Bereich Java.

Dich Bücher "Java ist auch eine Insel" und "Java7 mehr als eine Insel" hab ich auch, falls da jemand ein Kapitel zu meinem Thema weiß, kann er es ja gerne Posten. Hab da noch nicht rein geschaut in die Bücher. ^^


----------



## Highchiller (29. Mrz 2014)

Ich versteh dein Problem nicht. Wir haben doch alles erklärt. Hier ein ganz simples Beispiel in nicht mal 5 min zusammen geschraubt:



Spoiler: SimpleTextAdventure





```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Fragt den Spieler in welche Richtung er weitergehen will.
 */
public class SimpleTextAdventure {
	/**
	 * Starte das mini TextAdventure
	 * @param args
	 */
	public static void main(String[] args) {
		// Gebe dem Spieler eine Ausgabe vor
		System.out.println( "Du stehst in einem Wald. Links geht es nicht weiter. Du kannst aber geradeaus oder rechts lang gehen." );
		System.out.println( "Wofür entscheidest du dich?" );
		
		// Versuche seine Eingabe zu lesen, zum Beispiel mit Hilfe des BufferedReaders (kann Zeilenweise lesen)
		try ( BufferedReader input = new BufferedReader( new InputStreamReader(System.in) ) ){
			// die eingelesene Zeile ist erst mal null
			String zeile = null;
			
			// solange diese Zeile null ist tue folgendes
			while ( zeile == null ){
				// lese die Eingabe des Spielers
				zeile = input.readLine();
				
				/**
				 * Hier kannst du jetzt alle Fälle abfangen. Die Kunst ist möglichst viel der Eingaben des Spielers zu verstehen.
				 * Also auch 'gerade aus' oder 'Geradeaus' oder 'gradaus' oder 'gehe grade aus' etc.
				 * Das ist das schwerste am ganzen Spiel!!!
				 * 
				 * Hier gehen jetzt nur ganz simple fälle. Wenn der Spieler nicht genau 'geradeaus' schreibt und Enter drückt wird die Eingabe
				 * nicht erkannt! Das ist natürlich schlecht!
				 */
				if ( zeile.matches( "geradeaus" ) ){
					// GEH GERADE AUS
					System.out.println("Du gehst geradeaus!");
				} else if ( zeile.matches( "rechts rum" ) ){
					// GEH RECHTS LANG
					System.out.println( "Du gehst rechts rum." );
				} else if ( zeile.matches( "dreh um" ) ){
					// DREH UM
					System.out.println("Du drehst dich um.");
				} else { // immer daran denken, dass der Spieler auch falsche Eingaben tätigen kann. Das sollte man auch abhandeln.
					zeile = null;
					System.out.println( "Das geht leider nicht. Möchtest du gerade aus gehen, schreibe 'geradeaus'." + System.lineSeparator()
							+ "Möchtest du rechts entlang gehen, schreibe 'rechts rum'." + System.lineSeparator()
							+ "Möchtest du umdrehen, schreibe 'umdrehen'." + System.lineSeparator()
							+ "Wofür entscheidest du dich?");
				} // schon fertig...
			}
		} catch (IOException e) { // Fehler abhandeln nicht vergessen.
			e.printStackTrace();
		}
	}
}
```




Reicht dir das jetzt? Wenn du sagst du hast System.out und System.in verstanden reicht das schon für die ersten kleinen Beispiele...

PS: Wegen der Bücher. "Java ist auch eine Insel" kannst du dir mal Kapitel 4 durchlesen. Mehr sollte für dich (zumindest erst mal) nicht von Interesse sein.Kapitel 4 - Der Umgang mit Zeichenketten
Wenn du mehr über das Auslesen aus Dateien und über den obigen BufferedReader lernen willst ließt du einfach Kapitel 17 - Datenströme


----------



## GrimmeL (29. Mrz 2014)

Na der Code hilft mir doch schon super weiter, danke dafür. So etwas hab ich doch gesucht, wo man es auch anschaulich sehen kann. 

Und die zwei Kapitel im Buch werde ich mir mal anschauen.


----------

