package cap12.salvagioco;

import IngressoUscita.Console;
import cap6.labirinto.*;
import java.io.*;

class Test
{ public static void main(String[] args)
  { Giocatore giocatore;
    try
    { ObjectInputStream ois =
        new ObjectInputStream(
          new FileInputStream("labirinto.dat"));
      giocatore = (Giocatore) ois.readObject();
      Console.scriviStringa("Gioco caricato");
    }
    catch (Exception e)
    { Console.scriviStringa(
        "Caricamento fallito: " + e.getMessage());
      Stanza s1 = new StanzaSalva("stanza 1");
      Stanza s2 = new StanzaSalva("stanza 2");
      Stanza s3 = new StanzaSalva("stanza 3");
      Porta p1 = new PortaSalva(s1, s2);
      s1.collega(Stanza.Direzioni.EST, p1);
      s2.collega(Stanza.Direzioni.OVEST, p1);
      Porta p2 = new PortaSalva(s2, s3);
      s2.collega(Stanza.Direzioni.SUD, p2);
      s3.collega(Stanza.Direzioni.NORD, p2);
      giocatore = new GiocatoreSalva("giocatore");
      giocatore.muovi(s1);
    }
    boolean ancora = true;
    while (ancora)
    { Stanza s = giocatore.locazione();
      Console.scriviStringa(s.descrivi());
      Stanza.Direzioni[] dir = s.direzioni();
      if (dir.length > 0)
      { Console.scriviStringa("Puoi andare a:");
        for (int i = 0; i < dir.length; i++)
          Console.scriviStringa(dir[i].toString());
      }
      Console.scriviStringa("Dove vuoi andare?");
      String in = Console.leggiStringa();
      if (in.equals("salva"))
      { try
        { ObjectOutputStream oos =
            new ObjectOutputStream(
              new FileOutputStream("labirinto.dat"));
          oos.writeObject(giocatore);
          Console.scriviStringa(
            "Gioco salvato in 'labirinto.dat'");
        }
        catch (Exception e)
        { Console.scriviStringa(
            "Errore: " + e.getMessage());
        }
      }
      else if (in.equals("fine"))
        ancora = false;
      else if (
        in.equals("nord") || in.equals("sud") ||
            in.equals("est") || in.equals("ovest"))
      { Stanza.Direzioni d =
          Stanza.Direzioni.valueOf(in.toUpperCase());
        Risultato r = s.vai(giocatore, d);
        Console.scriviStringa(r.getMessage());
      }
      else
        Console.scriviStringa(
          "Non capisco la parola " + in);
    }
  }
}
