/// <summary> /// Questa funzione controlla se l'eroe è passato di livello dopo aver ucciso un mostro /// </summary> /// <param name="eroe">è passato per riferimento perchè se passa di livello aumenta il livello e i punti vita</param> public static void ControlloLivello(ref Eroi eroe) { //Se l'eroe è di livello 5 non può più passare di livello if (eroe.Livello == 5) { return; } //DIConfig var serviceProvider = DIConfig.Configurazione(); LivelliService livelliService = serviceProvider.GetService <LivelliService>(); //Prendo la lista dei livelli List <Livelli> listaLivelli = new List <Livelli>(livelliService.ListaLivelli()); //Confronto i punti eroe con i punti massimi del suo livello, se li supera passa di livello foreach (var item in listaLivelli) { if (item.ID == eroe.Livello + 1) //Livello successivo { if (item.PuntiPassaggio <= eroe.Punti) { Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("Congratulazioni sei passato di livello!!"); eroe.Livello++; Console.WriteLine("Sei salito al livello: " + eroe.Livello); eroe.PuntiVita = item.PuntiVita; Console.WriteLine("Ora i tuoi punti vita sono: " + eroe.PuntiVita); Console.ForegroundColor = ConsoleColor.White; break; } } } }
//In questa classe ci sono tutte le funzioni relative alla partita /// <summary> /// Gestisce tutta la partita /// </summary> /// <param name="eroe">Prende l'eroe scelto dal giocatore</param> public static void Turno(Eroi eroe) { //DIConfig var serviceProvider = DIConfig.Configurazione(); MostroService mostroService = serviceProvider.GetService <MostroService>(); ArmiService armiService = serviceProvider.GetService <ArmiService>(); EroiService eroiService = serviceProvider.GetService <EroiService>(); LivelliService livelliService = serviceProvider.GetService <LivelliService>(); //Il turno finisce quando l'eroe o il mostro muiono bool morto = false; //La partita finisce quando l'utente decide di tornare al menu bool giocaAncora; //Numero dei turni int n = 0; //Iniziare il timer del tempo di gioco dell'eroe Stopwatch watch = new Stopwatch(); watch.Start(); do { //A inizio di ogni turno cancello la console Console.Clear(); //Aumento il numero dei turni; n++; //A ogni turno cambio il Mostro //Richiamo un mostro random di livello >= livello eroe List <Mostri> mostri = new List <Mostri>(mostroService.ListaMostriLivelloEroe(eroe.Livello)); Random random = new Random(); int numRandom = random.Next(mostri.Count); Mostri mostroDaSconfiggere = mostri[numRandom]; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Turno numero : " + n); Console.ForegroundColor = ConsoleColor.Red; Console.Write(mostroDaSconfiggere.Nome + " livello " + mostroDaSconfiggere.Livello); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(" VS "); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write($"{eroe.Nome} livello {eroe.Livello}\n"); Console.ForegroundColor = ConsoleColor.White; //A inizio turno resetto che nessuno è morto morto = false; //Con il Mock i danni al mostro vengono salvati, devo resettarlo //Con il database non serve //mostroDaSconfiggere.PuntiVita = livelliService.RitornaLivello(mostroDaSconfiggere.Livello).PuntiVita; do { //Gioca sempre prima l'eroe int danniSubiti = GiocaEroe(eroe, mostroDaSconfiggere, out bool danniEroe); //Se la fuga ha successo if (danniSubiti > 0 && danniEroe) { //Li sottraggo dai punti eroe.Punti -= danniSubiti; //finisce il turno break; } //Attacco il mostro else if (danniSubiti > 0) { mostroDaSconfiggere.PuntiVita -= danniSubiti; //Se il mostro non è morto scrivo quanti punti vita gli rimangono Console.ForegroundColor = ConsoleColor.Blue; if (mostroDaSconfiggere.PuntiVita > 0) { Console.WriteLine($"Il mostro ha {mostroDaSconfiggere.PuntiVita} punti vita"); } Console.ResetColor(); if (mostroDaSconfiggere.PuntiVita <= 0) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Il mostro è morto\nHai Vinto!!!"); Console.ForegroundColor = ConsoleColor.White; //Devo aggiungere i punti vittoria all'eroe: livello mostro * 10 eroe.Punti += mostroDaSconfiggere.Livello * 10; //Controllo se è passato di livello ControlloLivello(ref eroe); //Controllo se ha vinto (è arrivato a 200 punti) if (Vittoria(eroe)) { //Se vince torna al menu principale salvando le statistiche watch.Stop(); //Console.WriteLine("Watch: " + watch.ElapsedMilliseconds); //TimeSpan time = new TimeSpan(watch.ElapsedMilliseconds * 10000); //Console.WriteLine("Time : " + time); eroe.TempoTotale += watch.ElapsedMilliseconds; eroiService.SalvaProgressi(eroe); return; } //Il mostro è morto finisce il turno morto = true; } } //Se la fuga fallisce //è il turno del mostro se uno dei due non è morto if (morto != true) { Console.WriteLine("è il turno del mostro"); int danniMostro = GiocaMostro(mostroDaSconfiggere); eroe.PuntiVita -= danniMostro; Console.WriteLine("Il mostro attacca con successo"); //Se l'eroe non è morto mostro quanti punti vita gli restano Console.ForegroundColor = ConsoleColor.Blue; if (eroe.PuntiVita > 0) { Console.WriteLine($"L'eroe ha {eroe.PuntiVita} punti vita"); } Console.ResetColor(); if (eroe.PuntiVita <= 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("L'eroe è morto\nHai perso..."); Console.ForegroundColor = ConsoleColor.White; //L'eroe è morto, lo cancello eroiService.EliminaEroe(eroe); morto = true; } } } while (morto == false); //Se è morto l'eroe torna direttamente al menu, non può decidere di non salvare if (eroe.PuntiVita <= 0) { break; } //Se ha vinto può decidere se continuare o se tornare salvando o no Console.WriteLine("Il turno è finito, cosa vuoi fare?\n" + "1 - Giocare ancora\n" + "2 - Salva e torna al menu\n" + "3 - Torna al menu senza salvare"); int scelta = 0; bool corretta = false; do { corretta = Int32.TryParse(Console.ReadLine(), out scelta); if (corretta == false || scelta < 1 || scelta > 3) { Console.WriteLine("Comando non valido, riprova:"); } } while (corretta == false || scelta < 1 || scelta > 3); //Se decide di non salvare torna al menu principale if (scelta == 3) { break; } else if (scelta == 2) { giocaAncora = false; } else { giocaAncora = true; } //Salva e torna al menu if (giocaAncora != true) { //Fermo il timer watch.Stop(); //Console.WriteLine("Watch: " + watch.ElapsedMilliseconds); //TimeSpan time = new TimeSpan(watch.ElapsedMilliseconds * 10000); //Console.WriteLine("Time : " + time); //finita la partita salvo i progressi (solo se l'eroe non è morto) eroe.TempoTotale += watch.ElapsedMilliseconds; eroiService.SalvaProgressi(eroe); } } while (giocaAncora == true); //Al rientro nel menu si cancella la console Console.WriteLine("Premi un tasto per tornare al menu principale"); Console.ReadKey(); }