//Dato un eroe (e quindi il suo livello) //prende la lista completa di tutti i mostri con il livello minore o ugale a quello dell'eroe e sorteggia un mostro //Restituisceil mostro sorteggiato public static Mostro SorteggioMostro(Eroe eroe) { MostroService mostroService = serviceProvider.GetService <MostroService>(); var mostri = mostroService.GetMostriByLivello(eroe.Livello).ToList(); Random x = new Random(); int indiceEstratto = x.Next(0, mostri.Count()); return(mostri[indiceEstratto]); }
//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(); }
//Dato un oggetto mostro //Lo crea nel db public static void CreaMostro(Mostro mostro) { MostroService mostroService = serviceProvider.GetService <MostroService>(); mostroService.CreateNewMostro(mostro); }
static void Main(string[] args) { var serviceProvider = Configurazone.Configurazione(); EroeService eroeservice = serviceProvider.GetService <EroeService>(); GiocatoreService giocatoreService = serviceProvider.GetService <GiocatoreService>(); MostroService mostroService = serviceProvider.GetService <MostroService>(); ArmaService armaService = serviceProvider.GetService <ArmaService>(); ClasseService classeService = serviceProvider.GetService <ClasseService>(); LivelloService livelloService = serviceProvider.GetService <LivelloService>(); List <Giocatore> listaG = giocatoreService.GetAllGiocatori().ToList(); //inizio del gioco Console.WriteLine("Benvenuto in eroi contro mostri"); Giocatore giocatore = new Giocatore(); Console.WriteLine("Inserisci il tuo nome:"); string n = Console.ReadLine(); giocatore.Nome = n; Console.WriteLine(); //Controllo sul giocatore Partita.ControlloGiocatore(giocatore, listaG); giocatore = giocatoreService.GetGiocatore(n); int x = 0; do { //ogni volta che torno al menù vengono caricate le liste aggiornate List <Livello> listaLivelli = livelloService.GetAllLivelli().ToList(); List <Classe> listaClassi = classeService.GetAllClassi().ToList(); List <Arma> listaArmi = armaService.GetAllArmi().ToList(); List <Giocatore> listaGiocatori = giocatoreService.GetAllGiocatori().ToList(); List <Eroe> listaeroi = eroeservice.GetAllEroi().ToList(); List <Mostro> listaMostri = mostroService.GetAllMostri().ToList(); Console.WriteLine("Se vuoi iniziare una partita premi 1"); Console.WriteLine("Se vuoi creare un eroe premi 2"); Console.WriteLine("Se vuoi eliminare un eroe premi 3"); Console.WriteLine("Se vuoi vedere le statistiche premi 4"); //inserisco questa scelta solo se il giocatore ha la caratteristica richiesta if (giocatore.Ruolo == "Admin") { Console.WriteLine("Dato che sei Admin, se vuoi inserire un mostro premi 5"); } Console.WriteLine("Se vuoi uscire dal gioco premi un tasto"); char a = Console.ReadKey().KeyChar; Console.WriteLine(); switch (a) { case '1': //Scelgo l'eroe per la partita Eroe eroe = Partita.SceltaEroe(listaeroi, giocatore, listaClassi, listaArmi); //controllo di non aver inserito male i dati if (eroe == null) { giocatore.ListaEroi.Clear(); break; } //aggiorno i restanti campi eroe.Classe = classeService.GetClasseByID(eroe.ClasseID); eroe.Arma = armaService.GetArmaByID(eroe.ArmaID); eroe.Giocatore = giocatoreService.GetGiocatore(giocatore.Nome); eroe.GiocatoreID = eroe.Giocatore.ID; eroe.Livello = livelloService.GetLivello(eroe.LivelloID); if (eroe == null) { x = 0; break; } //Scelgo il mostro con la funzione random Mostro mostro = Partita.SceltaMostro(eroe, listaMostri); //Inizia la battaglia x = Partita.Battaglia(eroe, mostro); Console.WriteLine("Se vuoi giocare ancora premi 0"); char d = Console.ReadKey().KeyChar; Console.WriteLine(); if (d == '0') { giocatore.ListaEroi.Clear(); x = 0; break; } else { x = 1; } break; case '2': Eroe eroe3 = Partita.CreazioneEroe(giocatore, listaClassi, listaArmi, listaeroi); break; case '3': Partita.VisualizzaEroi(listaeroi, giocatore); Console.WriteLine("Inserisci il nome dell'eroe che vuoi eliminare"); string nome = Console.ReadLine(); Eroe eroe2 = eroeservice.GetEroeByName(nome); if (eroe2.Nome == null) { Console.WriteLine("Non esiste questo eroe!"); break; } eroeservice.DeleteEroe(eroe2); break; case '4': Partita.VisualizzaStatistiche(giocatore, listaGiocatori, listaeroi); break; case '5': //nel caso in cui un giocatore Utente inserisca il 5 faccio un controllo e lo riporto al menù if (giocatore.Ruolo != "Admin") { Console.WriteLine("Scelta sbagliata, Torna al menu"); break; } Partita.CreazioneMostro(listaMostri, listaClassi, listaArmi, listaLivelli); Console.WriteLine("Il Mostro é stato creato, torna al menù"); break; default: x = 1; break; } } while (x == 0); }
/// <summary> /// Metodo Start che mostra il menù principale /// e fa partire il gioco /// </summary> public static void Start(Giocatore giocatore) { #region Dependency Injection var serviceProvider = DIConfig.Config(); HeroService heroService = serviceProvider.GetService <HeroService>(); ClasseService classeService = serviceProvider.GetService <ClasseService>(); ArmaService armaService = serviceProvider.GetService <ArmaService>(); //LevelService levelService = serviceProvider.GetService<LevelService>(); MostroService mostroService = serviceProvider.GetService <MostroService>(); var mostri = mostroService.GetAllMostri(); #endregion //Chiamo il menù delle opzioniprima di iniziare l'eventuale partita Helper.Menu(); //Catturo la scelta dell'utente da console bool IsCorrectUserInput = Int32.TryParse(Console.ReadLine(), out int key); Console.WriteLine(); //Se l'input è idoneo, per ogni opzione scelta //vengono eseguite le istruzioni corrispondenti if (IsCorrectUserInput) { switch (key) { #region CASO 1 NUOVO EROE case 1: //Giocatore può creare un nuovo eroe con il quale giocare #region CREAZIONE EROE //Richiesta Parametri in input da console Console.WriteLine("Inserisci il nome del tuo Eroe: "); string Nome = Console.ReadLine(); Console.WriteLine("CLASSI: "); var classi = classeService.GetAllClassi(); foreach (var cl in classi) { if (cl.Hero == true) { Console.WriteLine($"{cl.Nome}"); } } Console.WriteLine("Scegli la classe del tuo Eroe: "); string Classe = Console.ReadLine(); Console.WriteLine("ARMI: "); var armi = armaService.GetAllArmi(); foreach (var arma in armi) { if (arma.Classe == Classe) { Console.WriteLine($"{arma.Nome}"); } } Console.WriteLine("Scegli l'arma del tuo Eroe: "); string Arma = Console.ReadLine(); Hero hero = new Hero(Nome, Classe, Arma, giocatore); heroService.CreateHero(hero); //è stato creato un nuovo oggetto eroe, sia nel programma //nel database e può iniziare a giocare Console.WriteLine("Premi il tasto invio per iniziare a giocare!"); Console.ReadLine(); #endregion //GAME //Chiamo il metodo che gioca la battaglia eroe selezionato contro mostri //formata eventualmente da diversi scontri Turno.Game(hero, mostri, giocatore); break; #endregion #region CASO 2 ELIMINA EROE case 2: //Giocatore sceglie di eliminare un suo eroe Console.WriteLine("I Tuoi Eroi: "); var heros = heroService.GetAllHeros(); //Seleziono solo gli eroi del giocatore corrente foreach (var h in heros) { if (h.Giocatore.Nome == giocatore.Nome) { Console.WriteLine($"{h.Nome}"); } } Console.WriteLine("Seleziona l'Eroe da eliminare: "); string heroDel = Console.ReadLine(); Hero heroToDelete = heroService.GetHero(heroDel); bool deleted = heroService.DeleteHero(heroToDelete); if (deleted == true) { Console.WriteLine("L'operazione di cancellazione è avvenuta correttamente"); } else { Console.WriteLine("L'operazione di cancellazione NON è avvenuta correttamente"); } Console.ReadLine(); break; #endregion #region CASO 3 CONTINUA PARTITA EROE case 3: //il giocatore sceglie di continuare la partita con un suo eroe già esistente Console.WriteLine("Ecco i Tuoi Eroi: "); var eroi = heroService.GetAllHeros(); //Seleziono solo gli eroi associati al giocatore corrente foreach (var h in eroi) { if (h.Giocatore.Nome == giocatore.Nome) { Console.WriteLine($"{h.Nome}"); } } Console.WriteLine("Seleziona l'Eroe col quale giocare la partita: "); string nomeHero = Console.ReadLine(); hero = heroService.GetHero(nomeHero); //GAME //Chiamo il metodo che gioca la battaglia eroe selezionato contro mostri //formata eventualmente da diversi scontri Turno.Game(hero, mostri, giocatore); break; #endregion case 'q': //Il giocatore sceglie di uscire dal gioco Console.WriteLine("Arrivederci!!!"); Console.ReadLine(); break; default: //caso in cui il giocatore ha inserito un input errato Console.WriteLine("Riprovare."); Console.ReadLine(); break; } } Console.Clear(); }
/// <summary> /// Questo è il menu che viene mostrato all'utente /// </summary> public static void Menu() { //DIConfig var serviceProvider = DIConfig.Configurazione(); EroiService eroiService = serviceProvider.GetService <EroiService>(); GiocatoriService giocatoriService = serviceProvider.GetService <GiocatoriService>(); MostroService mostroService = serviceProvider.GetService <MostroService>(); Console.Write("BENVENUTO A "); Console.ForegroundColor = ConsoleColor.Red; Console.Write("MOSTRI"); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(" VS "); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("EROI\n"); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Inserisci il tuo nome: "); string nomeGiocatore = Console.ReadLine(); //Confronto se il giocatore esiste o no List <Giocatori> listaGiocatori = new List <Giocatori>(); listaGiocatori = (List <Giocatori>)giocatoriService.ListaGiocatori(); bool giocatoreTrovato = false; Giocatori giocatoreAttuale = new Giocatori(); foreach (var item in listaGiocatori) { //Se esiste lo prendo if (nomeGiocatore == item.Nome) { giocatoreTrovato = true; giocatoreAttuale = item; break; } } //Se non esiste lo creo if (giocatoreTrovato == false) { giocatoreAttuale.Nome = nomeGiocatore; //Tutti i giocatori inseriti da console sono utenti, non admin giocatoreAttuale.Ruolo_ID = 1; //Se l'utente inserisce un nome già presente nel db il giocatore non viene inserito, //il nome deve essere univoco bool univoco = false; do { univoco = giocatoriService.CreaGiocatore(giocatoreAttuale); //Se il nome è univoco esco if (univoco == true) { break; } //Se non è univoco lo deve inserire di nuovo else { Console.WriteLine("Inserisci un nuovo nome: "); giocatoreAttuale.Nome = Console.ReadLine(); } } while (true); List <Giocatori> listaGiocatori2 = new List <Giocatori>(); listaGiocatori2 = (List <Giocatori>)giocatoriService.ListaGiocatori(); foreach (var item in listaGiocatori2) { if (nomeGiocatore == item.Nome) { giocatoreAttuale = item; break; } } } bool esci = false; do { //Resetto la console ogni volta che torno al menu Console.Clear(); List <Eroi> listaEroi = new List <Eroi>(); listaEroi = (List <Eroi>)eroiService.EroiDiUnGiocatore(giocatoreAttuale.ID); //Titolo Console.ForegroundColor = ConsoleColor.Red; Console.Write("MOSTRI"); Console.ForegroundColor = ConsoleColor.Blue; Console.Write(" VS "); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("EROI\n"); Console.ForegroundColor = ConsoleColor.White; //Se ha già degli eroi può: continuare con un eroe, eliminarne uno, crearlo, vedere le statistiche e uscire if (listaEroi.Count > 0) { Console.WriteLine("Menu principale:"); Console.WriteLine("1 - Crea un nuovo Eroe"); Console.WriteLine("2 - Continua con un Eroe"); Console.WriteLine("3 - Elimina un Eroe"); Console.WriteLine("4 - Guarda le statistiche dei tuoi eroi"); Console.WriteLine("5 - Salva ed esci"); //Se è admin può creare e cancellare i mostri e vedere le statistiche dei giocatori if (giocatoreAttuale.Ruolo_ID == 2) { Console.WriteLine("6 - Crea un nuovo mostro"); Console.WriteLine("7 - Elimina un mostro"); Console.WriteLine("8 - Guarda le statistiche globali"); } int index = 0; bool corretto = false; //Se non è admin può scegliere solo 5 opzioni if (giocatoreAttuale.Ruolo_ID == 1) { do { corretto = Int32.TryParse(Console.ReadLine(), out index); if (corretto == false || index < 1 || index > 6) { Console.WriteLine("Comando non riconosciuto, riprova"); } } while (corretto == false || index < 1 || index > 6); } //Se è admin può scegliere tra 8 opzioni else { do { corretto = Int32.TryParse(Console.ReadLine(), out index); if (corretto == false || index < 1 || index > 8) { Console.WriteLine("Comando non riconosciuto, riprova"); } } while (corretto == false || index < 1 || index > 8); } switch (index) { case 1: //Crea un nuovo eroe Eroi eroeCreato = eroiService.CreateEroe(giocatoreAttuale); Console.WriteLine("Premi un tasto per iniziare il turno"); Console.ReadKey(); Partita.Turno(eroeCreato); break; case 2: //Può vedere solo i suoi eroi foreach (var item in listaEroi) { Console.WriteLine($"{item.ID} - {item.Nome} livello: {item.Livello}"); } //Deve scegliere l'eroe bool eroeGiusto = false; Console.WriteLine("Inserisci il numero dell'eroe:"); do { bool isCorretto = Int32.TryParse(Console.ReadLine(), out int nEroe); if (isCorretto == true) { foreach (var item in listaEroi) { if (nEroe == item.ID) { eroeGiusto = true; //Quando seleziona l'eroe inizia il turno Console.WriteLine("Premi un tasto per iniziare il turno"); Console.ReadKey(); Partita.Turno(item); break; } } } if (isCorretto == false || eroeGiusto == false) { Console.WriteLine("Eroe non corretto, riprova:"); } } while (eroeGiusto == false); break; case 3: //Eliminare un eroe foreach (var item in listaEroi) { Console.WriteLine($"{item.ID} - {item.Nome} livello: {item.Livello}"); } //Deve scegliere l'eroe bool eroeDaEliminare = false; Console.WriteLine("Inserisci il numero dell'eroe da eliminare:"); do { bool eroeCorretto = Int32.TryParse(Console.ReadLine(), out int nEroe); if (eroeCorretto == true) { foreach (var item in listaEroi) { if (nEroe == item.ID) { eroeDaEliminare = true; //Quando seleziona l'eroe lo elimino eroiService.EliminaEroe(item); break; } } } if (eroeCorretto == false || eroeDaEliminare == false) { Console.WriteLine("Eroe non valido, riprova:"); } } while (eroeDaEliminare == false); Console.WriteLine("Premi un tasto per continuare"); Console.ReadKey(); break; case 4: //Mostra le statistiche del giocatore attuale Partita.StatisticheUtente(giocatoreAttuale); break; case 5: //Esce //Non faccio nessuna operazione perchè tutte quelle precedenti sono già state salvate Console.WriteLine("Arrivederci!"); esci = true; break; //Questi può sceglierli solo un admin case 6: //Crea un nuovo mostro mostroService.CreaMostro(); Console.WriteLine("Premi un tasto per continuare"); Console.ReadKey(); break; case 7: //Elimina un mostro mostroService.EliminaMostro(); Console.WriteLine("Premi un tasto per continuare"); Console.ReadKey(); break; case 8: //Mostra statistiche dei giocatori Partita.Statistiche(); break; default: Console.WriteLine("Case default"); break; } } else { //Se non ha eroi può crearne uno nuovo o uscire dal gioco Console.WriteLine("Menu principale:"); Console.WriteLine("1 - Crea un nuovo Eroe"); Console.WriteLine("2 - Salva ed esci"); //Se è admin può creare e cancellare i mostri e vedere le statistiche dei giocatori if (giocatoreAttuale.Ruolo_ID == 2) { Console.WriteLine("3 - Crea un nuovo mostro"); Console.WriteLine("4 - Elimina un mostro"); Console.WriteLine("5 - Guarda le statistiche"); } int index = 0; bool corretto = false; //Se non è admin può scegliere solo 2 opzioni if (giocatoreAttuale.Ruolo_ID == 1) { do { corretto = Int32.TryParse(Console.ReadLine(), out index); if (corretto == false || index != 1 && index != 2) { Console.WriteLine("Comando non riconosciuto, riprova"); } } while (corretto == false || index != 1 && index != 2); } //Se è admin può scegliere tra 5 opzioni else { do { corretto = Int32.TryParse(Console.ReadLine(), out index); if (corretto == false || index < 1 || index > 5) { Console.WriteLine("Comando non riconosciuto, riprova"); } } while (corretto == false || index < 1 || index > 5); } switch (index) { case 1: //Crea un nuovo eroe Eroi eroeCreato = eroiService.CreateEroe(giocatoreAttuale); Console.WriteLine("Premi un tasto per iniziare il turno"); Console.ReadKey(); Partita.Turno(eroeCreato); break; case 2: //Esce //Non faccio nessuna operazione perchè tutte quelle precedenti sono già state salvate Console.WriteLine("Arrivederci!"); esci = true; break; //Questi può sceglierli solo un admin case 3: //Crea un nuovo mostro mostroService.CreaMostro(); Console.WriteLine("Premi un tasto per continuare"); Console.ReadKey(); break; case 4: //Elimina un mostro mostroService.EliminaMostro(); Console.WriteLine("Premi un tasto per continuare"); Console.ReadKey(); break; case 5: //Mostra statistiche dei giocatori Partita.Statistiche(); break; default: Console.WriteLine("Case default"); break; } } } while (esci != true); }