#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include "karte.h"
#include "nachr.txt"
#include "woerter.h"
#include "ggstde.h"
#include "plan.h"

Ort IhrAuto;
Ort Eingang;
Ort Lobby;
Ort Gepaeck;
Ort DunklerRaum;
Ort TicketKontrolle;
Ort Tunnel;
Ort Toilette;
Ort Snackbar;
Ort Sicherheit;
Ort Wartebereich;
Ort Gate1;
Ort Gate2;
Ort Gate3;
Ort Gate4;
Ort Flugzeug1;
Ort Flugzeug2;
Ort Flugzeug3;
Ort Flugzeug4;

extern Plan FlugInfo;
extern Gegenstaende PersoenlicheGegenstaende;
extern Woerter EingabeWoerter;


void Karte::Initialisiere(void)
{
   cout << StartNachricht;

   Aufenthaltsort = &IhrAuto;

   IhrAuto.Init(&Eingang, // Im Norden
		  NULL,		   // Im Osten
		  NULL,		   // Im Sden
		  NULL,		   // Im Westen
		  IhrAutoNachricht,  // Nachricht, wenn wir hierher kommen
		  IASchauNachricht); // Nachricht fr "Schau"

   Eingang.Init(&Lobby,
		  NULL,
		  NULL,    // Kein Zurck zum Auto, es fhrt weg
		  NULL,
		  EingangNachricht,
		  ESchauNachricht);

   Lobby.Init(&TicketKontrolle,
		  NULL,
		  &Eingang,
		  &Gepaeck,
		  LobbyNachricht,
		  LSchauNachricht);

   Gepaeck.Init(NULL,
		  &Lobby,
		  NULL,
		  &DunklerRaum,
		  GepaeckNachricht,
		  GSchauNachricht);

   DunklerRaum.Init(NULL,
		  NULL,
		  NULL,
		  NULL,
		  DunklerRaumNachricht,
		  DRSchauNachricht);

   TicketKontrolle.Init(&Tunnel,
		  NULL,
		  &Lobby,
		  NULL,
		  TicketKontrolleNachricht,
		  TKSchauNachricht);

   Tunnel.Init(&Sicherheit,
		  &Snackbar,
		  &TicketKontrolle,
		  &Toilette,
		  TunnelNachricht,
		  TlSchauNachricht);

   Toilette.Init(NULL,
		  &Tunnel,
		  NULL,
		  NULL,
		  ToiletteNachricht,
		  TSchauNachricht);

   Snackbar.Init(NULL,
		  NULL,
		  NULL,
		  &Tunnel,
		  SnackbarNachricht,
		  SBSchauNachricht);

   Sicherheit.Init(&Wartebereich,
		  NULL,
		  &Tunnel,
		  NULL,
		  SicherheitNachricht,
		  SSchauNachricht);

   Wartebereich.Init(NULL,
		  &Gate3,
		  &Sicherheit,
		  &Gate2,
		  WartebereichNachricht,
		  WSchauNachricht);

   Gate1.Init(&Flugzeug1,
		  &Gate2,
		  NULL,
		  NULL,
		  Gate1Nachricht,
		  G1SchauNachricht);

   Flugzeug1.Init(NULL,
		  NULL,
		  NULL,
		  NULL,
		  FlugzeugNachricht,
		  FSchauNachricht);

   Gate2.Init(&Flugzeug2,
		  &Wartebereich,
		  NULL,
		  &Gate1,
		  Gate2Nachricht,
		  G2SchauNachricht);

   Flugzeug2.Init(NULL,
		  NULL,
		  NULL,
		  NULL,
		  FlugzeugNachricht,
		  FSchauNachricht);

   Gate3.Init(&Flugzeug3,
		  &Gate4,
		  NULL,
		  &Wartebereich,
		  Gate3Nachricht,
		  G3SchauNachricht);

   Flugzeug3.Init(NULL,
		  NULL,
		  NULL,
		  NULL,
		  FlugzeugNachricht,
		  FSchauNachricht);

   Gate4.Init(&Flugzeug4,
		  NULL,
		  NULL,
		  &Gate3,
		  Gate4Nachricht,
		  G4SchauNachricht);

   Flugzeug4.Init(NULL,
		  NULL,
		  NULL,
		  NULL,
		  FlugzeugNachricht,
		  FSchauNachricht);

   PersoenlicheGegenstaende.GegenstandHinzu(Schluessel);	// Spielerin nimmt Schlssel
   PersoenlicheGegenstaende.GegenstandHinzu(Geld);	// Spielerin nimmt Geld

   IhrAuto.GegenstandHinzu(Ticket);       // Ticket ist im Auto
   Snackbar.GegenstandHinzu(Konfekt);	// Konfekt ist in Snackbar
}




void Karte::TuHandlung(void)
{
   if (EingabeWoerter.IstEineRichtung())	// Geh an einen anderen Ort
   {
	Resultat = Aufenthaltsort->Geh(EingabeWoerter.HoleVerb());
	if (Resultat)				// wenn nicht NULL
	{
	   Aufenthaltsort = Resultat;  // Passt. Wir könne wohin gehen
	   Aufenthaltsort->ZeigeNachricht();
	}

					   // Spielende im dunklen Raum
	if (Aufenthaltsort == &DunklerRaum)
	{
	   EingabeWoerter.StoppeSpiel();  // Setze Verb auf "Aus"
	   cout << "Druecken Sie eine Taste zum Beenden.";
	   getchar();
	}
   }
										// Rucksack
   else if (EingabeWoerter.HoleVerb() == Rucksack)
	PersoenlicheGegenstaende.ZaehleGegenstaende();

										// Schau
   else if (EingabeWoerter.HoleVerb() == Schau)
	Aufenthaltsort->ZeigeGegenstaendeliste();

									// Lege Gegenstand weg
   else if (EingabeWoerter.HoleVerb() == Lege)
   {
	if (PersoenlicheGegenstaende.GegenstandHier(EingabeWoerter.HoleSubstantiv()))
	{
	   PersoenlicheGegenstaende.GegenstandWeg(EingabeWoerter.HoleSubstantiv());
	   Aufenthaltsort->GegenstandHinzu(EingabeWoerter.HoleSubstantiv());
	   cout << " Abgelegt.\n";
	}
	else
	{
	   cout << "Sie koennen nicht weglegen, was sie nicht haben.\n";
	}
   }

									// Nimm Gegenstand
   else if (EingabeWoerter.HoleVerb() == Nimm)
   {
	if (Aufenthaltsort->GegenstandHier(EingabeWoerter.HoleSubstantiv()))
	{
	   Aufenthaltsort->GegenstandWeg(EingabeWoerter.HoleSubstantiv());
	   PersoenlicheGegenstaende.GegenstandHinzu(EingabeWoerter.HoleSubstantiv());
	   cout << " Genommen.\n";
	}
	else
	{
	   cout << "Das ist nicht hier, also koennen Sie es nicht nehmen.\n";
	}
   }

									   // Kaufe Konfekt
   else if ((EingabeWoerter.HoleVerb() == Kauf) &&
			(EingabeWoerter.HoleSubstantiv() == Konfekt) &&
				   (Aufenthaltsort == &Snackbar))
   {
	if ((PersoenlicheGegenstaende.GegenstandHier(Geld)) &&
				   (Aufenthaltsort->GegenstandHier(Konfekt)))
	{
	   PersoenlicheGegenstaende.GegenstandWeg(Geld);
	   PersoenlicheGegenstaende.GegenstandHinzu(Konfekt);
	   Aufenthaltsort->GegenstandWeg(Konfekt);
	   Aufenthaltsort->GegenstandHinzu(Geld);
	   cout << " Sie haben jetzt Konfekt.\n";
	}
	else
	{
	   cout << "Bitte?!\n";
	}
   }

									 // Lies Ticket
   else if ((EingabeWoerter.HoleVerb() == Lies) &&
				     (EingabeWoerter.HoleSubstantiv() == Ticket))
   {
	if (PersoenlicheGegenstaende.GegenstandHier(Ticket))
	{
	   FlugInfo.ZeigeDestination();
	}
	else
	{
	   cout << "Die Destination ist nicht das Wunderland.\n";
	}
   }

									// Lies Monitor
   else if ((EingabeWoerter.HoleVerb() == Lies) &&
			   (EingabeWoerter.HoleSubstantiv() == Monitor) &&
				    (Aufenthaltsort == &TicketKontrolle))
   {
	FlugInfo.ZeigeFluege(Aufenthaltsort);
   }

									// Lies Monitor
   else if ((EingabeWoerter.HoleVerb() == Lies) &&
			 (EingabeWoerter.HoleSubstantiv() == Monitor) &&
					(Aufenthaltsort == &Wartebereich))
   {
	FlugInfo.ZeigeFluege(Aufenthaltsort);
   }

									  // Lies Zeitung
   else if ((EingabeWoerter.HoleVerb() == Lies) &&
			 (EingabeWoerter.HoleSubstantiv() == Zeitung) &&
						 (Aufenthaltsort == &Lobby))
   {
	cout << ZeitungNachricht;
   }
										  // Hilfe
   else if (EingabeWoerter.HoleVerb() == Hilfe)
   {
	cout << HilfeNachricht;
   }
										  // Schluss.
   else if (EingabeWoerter.HoleVerb() == Aus)	// Ignoriere, damit nichts
   {								//  ausgegeben wird.
	;
   }

   else
   {
	cout << "Bitte? Scusi? Pardon? (Ya lublu teba.).\n";
   }
}
