public Persona(string n, string d, int s, Dialogo dial) : base(n, d, s) { Dial = dial; }
/// <summary> /// Metodo che permette di caricare una mappa da file /// </summary> /// <param name="percorsoFile">Percorso del file in cui รจ presente la mappa</param> public void CaricaMappa(string percorsoFile) { try { using (StreamReader sr = new StreamReader(percorsoFile)) { //Lettura numero degli ambienti int n = int.Parse(sr.ReadLine()); Mappa = new Ambiente[n]; int count = 0; //Variabile per il conteggio dell'ambiente //Lettura file completo while (sr.Peek() != -1) { //Creazione ambiente Mappa[count] = new Ambiente("", null, null, null, null); string[] st = sr.ReadLine().Split(','); //Aggiunta della descrizione dell'ambiente Mappa[count].Descrizione = st[1].Trim().Replace("\\n", "\n"); //Controlla se sono presenti cose nell'ambiente if (st.Length > 2) { int nCose = int.Parse(st[2]); Mappa[int.Parse(st[0].Trim())].Azioni = new List<Azione>(); for (int i = 0; i < nCose; i++) { string[] act = sr.ReadLine().Split(':'); string nomeCosa = act[0]; string effettoCosa = act[1]; switch (nomeCosa) { case "Open": string indicePartenza = effettoCosa.Split('-')[0]; string indiceArrivo = effettoCosa.Split('-')[1]; Mappa[int.Parse(st[0].Trim())].Azioni.Add(new ApriPassaggio(int.Parse(indicePartenza), int.Parse(indiceArrivo))); break; case "Persona": Dialogo dial = new Dialogo(); string[] infos = effettoCosa.Split(','); string nome = infos[0]; string descrizione = infos[1]; int vita = int.Parse(infos[2]); if(infos[3] != "null") { try { using (StreamReader sr2 = new StreamReader("Dialoghi\\Dialoghi.txt")) { string[] ss = sr2.ReadLine().Split(','); string nomeAttuale; if (ss.Length > 1) nomeAttuale = ss[1].Trim(); else nomeAttuale = ""; bool arrivato = nomeAttuale == nome; while (!arrivato) { ss = sr2.ReadLine().Split(','); if (ss.Length > 1) nomeAttuale = ss[1].Trim(); else nomeAttuale = ""; arrivato = nomeAttuale == nome; } string[] inf = ss; if (infos[3] == inf[0]) { dial.Scelte = new List<Scelta>(); for (int k = 0; k < int.Parse(inf[2]); k++) { string[] dialogo = sr2.ReadLine().Split(';'); List<Tuple<string,int>> scelte = new List<Tuple<string,int>>(); for(int l = 1; l < dialogo.Length; l++) scelte.Add(new Tuple<string,int>(dialogo[l].Split(':')[0], dialogo[l].Split(':').Length > 1 ? int.Parse(dialogo[l].Split(':')[1]) : -1)); dial.Scelte.Add(new Scelta(dialogo[0], scelte)); } } } } catch (IOException ex) { MessageBox.Show("Eccezione in fase di carimento file : " + ex.Message); } catch (Exception ex) { MessageBox.Show("Eccezione non gestita : " + ex.Message); } } else { dial = null; } Mappa[int.Parse(st[0].Trim())].Cose.Add(new Persona(nome, descrizione, vita, dial)); break; case "Oggetto": Mappa[int.Parse(st[0].Trim())].Inv.Aggiungi(ReadOggetto(effettoCosa)); break; case "Nemico": infos = effettoCosa.Split(','); nome = infos[0].Trim(); descrizione = infos[1].Trim(); vita = int.Parse(infos[2].Trim()); int difesa = int.Parse(infos[3].Trim()); int attacco = int.Parse(infos[4].Trim()); int precisione = int.Parse(infos[5].Trim()); int livello = int.Parse(infos[6].Trim()); int dropExp = int.Parse(infos[7].Trim()); Oggetto[] drops = new Oggetto[int.Parse(infos[8].Trim())]; int[] dropsP = new int[int.Parse(infos[8].Trim())]; for (int k = 0; k < int.Parse(infos[8].Trim()); k++) { string s = sr.ReadLine(); s = s.Substring(3); string[] inf = s.Split(':'); switch (inf[0]) { case "Oggetto": drops[k] = ReadOggetto(inf[1].Split(',')[0].Trim()); dropsP[k] = int.Parse(inf[1].Split(',')[1].Trim()); break; default: break; } } Mappa[int.Parse(st[0].Trim())].Cose.Add(new Nemico(nome, descrizione, vita, difesa, attacco, precisione, livello, dropExp, drops, dropsP)); break; default: throw new NotImplementedException(); } } } //Creazione passaggi for (int i = 0; i < 4; i++) { string s = sr.ReadLine().Trim(); if (s != "null") { string[] ss = s.Trim().Split(','); Mappa[count].Passaggi[i] = new Passaggio(ss[0], bool.Parse(ss[1]), int.Parse(ss[2])); } else Mappa[count].Passaggi[i] = null; } count++; } } } catch (IOException ex) { MessageBox.Show("Eccezione in fase di carimento file : " + ex.Message); } catch (Exception ex) { MessageBox.Show("Eccezione non gestita : " + ex.Message); } }