# Einen Dialog zweier Personen erstellen (Textadventure)



## Sessiolog (15. Jul 2014)

Hallo Leute!

Ich habe heute morgen angefangen, ein kleines Textadventure zu programmieren. Ein Merkmal des Spiels soll es sein, dass jede Person in der Geschichte von einem kleinen JFrame repräsentiert wird. Zwischendurch soll es immer wieder vorkommen, dass sich zwei Personen (Also zwei JFrames) unterhalten. Dabei soll der gesprochene Text nur in dem Frame der sprechenden Person zu sehen sein. Die Ausführung im Groben:
Die "Drehbücher" der einzelnen Personen in .txt Dateien speichern. Von Reader einlesen lassen und in das JTextArea des bestimmten Frames drucken. 

Man könnte es ja so einrichten, dass nur eine Zeile pro Tastendruck ausgegeben wird, ähnlich wie bei den Pokemon/Zelda spielen, aber ich würde gerne ein paar Passagen einbauen, in welchen sich die Dialoge von selbst abspielen. Das ließe sich mit Threads lösen, die zeitgesteuert Text einlesen/drucken nur leider stehe ich vollkommen auf den Schlauch, wenn es um die Programmierung geht. Kann mir da jemand auf die Sprünge helfen? Wie kann man zwei Threads kommunizieren lassen?


----------



## SilverClaw (15. Jul 2014)

Hallo, endlich mal eine gut formulierte Frage. :applaus:

Eher nebenbei, Thread können z.B. über PipedStreams kommunizieren: Galileo Computing :: Java ist auch eine Insel – 17.7 Kommunikation zwischen Threads mit Pipes *

Allerding würde ich dir ein paar andere Sachen ans Herz legen:
1. Willst du wirklich zwei verschiedene JFrames verwenden?  Da empfiehlt sich doch lieber jeweils ein JPanel oder anderer Container innerhalb eines Frames.
2. Braucht es da zwei Threads? Das wird wahrscheinlich mehr Fehlerquellen bringen, als es nützlich ist.
Sag doch einfach deinem einen Thread, dass er je nachdem in das eine oder andere Dialogfeld schreiben soll. Mit dem Swing Timer lässt sich der Ablauf auch gut steuern. Zusätzlich ein Mouse- oder Keyboardlistener ließe ich dann auch einfach einbauen.


----------



## eMmiE (15. Jul 2014)

Ich gehe mal davon aus, dass die Personen immer nacheinander und nicht gleichzeitig sprechen sollen, oder?
Also, das erst der eine fertig spricht, notfalls mit "..." endet und dann der andere weiterspricht.

Dann brauchst du das ganze nicht Threadbasiert zu machen, sondern event-basiert, d.h. die Geschichte der nächste Dialog wird erst gesprochen, wenn Enter gedrückt wurde, bzw. wird dann die nächste Methode aufgerufen.

In den Methoden kann dann aber auch stehen, dass nicht nur in einen, sondern in zwei Frames/Panels, was auch immer, geschrieben/gesprochen werden kann

Thread-basiert macht nur Sinn, wenn er immer wieder das selbe macht (Spielposition -> Rendern -> Malen), ohne extra auf events (keyPressed,...) warten zu müssen

Gruß eMmiE


----------



## Sessiolog (15. Jul 2014)

@SilverClaw: Von den PipedStreams habe ich nie etwas gehört. Liegt wohl daran, dass ich mich nie durch die JavaInsel gequält habe. Schande über mein Haupt!  Ich werde mal gucken, ob und wie sich damit was anfangen lässt.

Und was die Sachen betrifft, die du mir ans Herz legen willst: Ja! Die Dialoge durch mehrere JFrames würde ich gerne drinnenlassen. Ich habe auch schon daran gedacht, an ein paar stellen so ca. 4 bis 6 JFrames reden zu lassen. Ob das nun auch umsetzbar sein wird, werde ich ja die nächsten Tage herausfinden.^^
Es ist aber tatsächlich ein bisschen sinnlos, zwei Threads für so etwas zu erstellen, wo doch einer reicht. 

@eMmiE: Richtig, das ganze ließe sich auch mit einem "keyPressed"-Event lösen, aber wie bereits gesagt: Ich möchte einige Passagen einbauen in denen sich die Dialoge von selbst abspielen, ohne das dafür etwas getippt/geklickt werden muss. So eine Art Zwischensequenz wenn man es so nennen möchte.

Danke für eure Hilfe


----------



## kaoZ (17. Jul 2014)

Dann würde ich den Dialogen / Events einfach einen Typ mit im Konstruktor übergeben :

0 = NORMAL;
1 = SEQUENCE;

so kannst du selber entscheiden ob ein Gespräch / Dialog startet welche s/r bestätigt werden muss oder selbstständig abläuft.

oder einfach mit Subtypen eines Dialoge arbeiten.


----------

