/// <summary> /// Sauvegarde les données de la partie en cours dans un fichier texte de sauvegarde /// </summary> public static void Sauvegarder() { if (File.Exists(Sauvegarde.NomFichier()) && Sauvegarde.DemandeEffacerAnciennePartie() == false) { NomFichierIndex = Sauvegarde.RecupererDernierIndexSauvegarde() + 1; } // Sauvegarde positions J1 string[] lignes = Sauvegarde.ConvertirObjetEnLigne(new string[0], Bateau.ObtenirPositionBateauxJoueur(1)); // Sauvegarde vies J1 lignes = Sauvegarde.ConvertirObjetEnLigne(lignes, Bateau.ObtenirVieBateauxJoueur(1)); // Sauvegarde positions J2 lignes = Sauvegarde.ConvertirObjetEnLigne(lignes, Bateau.ObtenirPositionBateauxJoueur(2)); // Sauvegarde vies J2 lignes = Sauvegarde.ConvertirObjetEnLigne(lignes, Bateau.ObtenirVieBateauxJoueur(2)); // Sauvegarde grille j1 lignes = Sauvegarde.ConvertirObjetEnLigne(lignes, Grille.ObtenirGrilleJoueur(1)); // Sauvegarde grille decouverte J1 lignes = Sauvegarde.ConvertirObjetEnLigne(lignes, Grille.ObtenirGrilleDecouverteJoueur(1)); // Sauvegarde grille J2 lignes = Sauvegarde.ConvertirObjetEnLigne(lignes, Grille.ObtenirGrilleJoueur(2)); // Sauvegarde grille decouverte J2 lignes = Sauvegarde.ConvertirObjetEnLigne(lignes, Grille.ObtenirGrilleDecouverteJoueur(2)); // Sauvegarde niveau lignes = lignes.Concat(new string[] { ((int)Jeu.NiveauJeu).ToString() }).ToArray(); File.WriteAllLines(Sauvegarde.NomFichier(), lignes); Console.Clear(); Console.WriteLine("======= Sauvegarder une partie ==="); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Votre partie a été sauvegardée dans le fichier " + Sauvegarde.NomFichier()); Console.ResetColor(); Console.WriteLine("-- Appuyez sur une touche pour continuer --"); Console.ReadKey(false); }
/// <summary> /// Affiche et gère l'écran de paramétrage d'une nouvelle partie /// </summary> public static void MenuDemarrerNouvellePartie() { Console.Clear(); Joueur.Start(); // On met à jour l'index de sauvegarde pour éviter d'écraser une ancienne partie Sauvegarde.NomFichierIndex = Sauvegarde.RecupererDernierIndexSauvegarde() + 1; // Initialisation des grilles Grille.GrilleJ1 = new int[Grille.LargeurGrille, Grille.HauteurGrille]; Grille.GrilleDecouverteJ1 = new int[Grille.LargeurGrille, Grille.HauteurGrille]; Grille.GrilleJ2 = new int[Grille.LargeurGrille, Grille.HauteurGrille]; Grille.GrilleDecouverteJ2 = new int[Grille.LargeurGrille, Grille.HauteurGrille]; // Initialisation des données des bateaux des joueurs Bateau.PositionBateauxJ1 = new int[Bateau.NombreTypesBateaux, 4]; Bateau.VieBateauxJ1 = new int[Bateau.NombreTypesBateaux]; Bateau.PositionBateauxJ2 = new int[Bateau.NombreTypesBateaux, 4]; Bateau.VieBateauxJ2 = new int[Bateau.NombreTypesBateaux]; Bateau.PlacerBateauxAuHasard(1); Bateau.PlacerBateauxAuHasard(2); //TODO: modifier ce code si on souhaite ajouter un mode JCJ Console.WriteLine("======= Nouvelle partie ======="); Grille.AfficherGrille(Grille.GrilleJ1); Console.WriteLine("-------------------------------"); ConsoleKey key = default(ConsoleKey); do { if (key != default(ConsoleKey)) { Console.ForegroundColor = ConsoleColor.Red; } Console.WriteLine("Etes-vous satisfait de ce placement ?"); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("(O)ui | N(on)"); Console.ResetColor(); key = Console.ReadKey(false).Key; }while (key != ConsoleKey.O && key != ConsoleKey.N); Program.ViderTampon(); if (key == ConsoleKey.O) { Jeu.DeroulementPartie(); } else { Jeu.MenuDemarrerNouvellePartie(); } }
/// <summary> /// Affiche et gère le déroulement d'une partie /// </summary> public static void DeroulementPartie() { int joueur = 1; IA.Reset(); while (true) { Console.Clear(); Joueur.Jouer(joueur); if (Joueur.aPerdu(Joueur.ObtenirAutreJoueur(joueur)) == true) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Le joueur " + joueur + " a gagné !!!"); Console.ResetColor(); Console.WriteLine("-- Appuyez sur une touche pour continuer --"); Console.ReadKey(false); Jeu.MenuPrincipal(); } joueur = Joueur.ObtenirAutreJoueur(joueur); Console.WriteLine("-- Appuyez sur une touche pour passer au tour de l'autre joueur --"); Console.ReadKey(false); Console.Clear(); Joueur.Jouer(joueur); if (Joueur.aPerdu(Joueur.ObtenirAutreJoueur(joueur)) == true) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Le joueur " + joueur + " a gagné :'("); Console.ResetColor(); Console.WriteLine("-- Appuyez sur une touche pour continuer --"); Console.ReadKey(false); Jeu.MenuPrincipal(); } joueur = Joueur.ObtenirAutreJoueur(joueur); if (Joueur.DemanderContinuer() == false) { Sauvegarde.Sauvegarder(); Jeu.MenuPrincipal(); } } }
/// <summary> /// Charge les données depuis le fichier de sauvegarde /// </summary> public static void Charger() { string[] lignes = File.ReadAllLines(Sauvegarde.NomFichier()); int index = 0; int[] data; // Chargement de la position des bateaux du joueur 1 for (int i = 0; i < Bateau.NombreTypesBateaux; i++) { data = ConvertirLigneEnTableauEntier(lignes[i]); for (int u = 0; u < data.Length; u++) { Bateau.PositionBateauxJ1[i, u] = data[u]; } } index += Bateau.NombreTypesBateaux; // Chargement de la vie des bateaux du joueur 1 Bateau.VieBateauxJ1 = ConvertirLigneEnTableauEntier(lignes[index]); index++; // Chargement de la position des bateaux du joueur 2 for (int i = 0; i < Bateau.NombreTypesBateaux; i++) { data = ConvertirLigneEnTableauEntier(lignes[index + i]); for (int u = 0; u < data.Length; u++) { Bateau.PositionBateauxJ2[i, u] = data[u]; } } index += Bateau.NombreTypesBateaux; // Chargement de la vie des bateaux du joueur 2 Bateau.VieBateauxJ2 = ConvertirLigneEnTableauEntier(lignes[index]); index++; // Chargement de la grille du joueur 1 for (int i = 0; i < Grille.GrilleJ1.GetLength(0); i++) { data = ConvertirLigneEnTableauEntier(lignes[index + i]); for (int u = 0; u < data.Length; u++) { Grille.GrilleJ1[i, u] = data[u]; } } index += Grille.GrilleJ1.GetLength(0); // Chargement de la grille de découverte du joueur 1 for (int i = 0; i < Grille.GrilleDecouverteJ1.GetLength(0); i++) { data = ConvertirLigneEnTableauEntier(lignes[index + i]); for (int u = 0; u < data.Length; u++) { Grille.GrilleDecouverteJ1[i, u] = data[u]; } } index += Grille.GrilleDecouverteJ1.GetLength(0); // Chargement de la grille du joueur 2 for (int i = 0; i < Grille.GrilleJ2.GetLength(0); i++) { data = ConvertirLigneEnTableauEntier(lignes[index + i]); for (int u = 0; u < data.Length; u++) { Grille.GrilleJ2[i, u] = data[u]; } } index += Grille.GrilleJ2.GetLength(0); // Chargement de la grille de découverte du joueur 2 for (int i = 0; i < Grille.GrilleDecouverteJ2.GetLength(0); i++) { data = ConvertirLigneEnTableauEntier(lignes[index + i]); for (int u = 0; u < data.Length; u++) { Grille.GrilleDecouverteJ2[i, u] = data[u]; } } index += Grille.GrilleDecouverteJ2.GetLength(0); // Chargement du niveau de difficulté Jeu.NiveauJeu = (Jeu.Niveau)Convert.ToInt32(lignes[index]); index++; // Gestion du nombre de tirs par salves for (int i = 0; i < Bateau.NombreTypesBateaux; i++) { if (Bateau.VieBateauxJ1[i] <= 0) { Joueur.TailleSalveJ2--; } if (Bateau.VieBateauxJ2[i] <= 0) { Joueur.TailleSalveJ1--; } } }
/// <summary> /// Affichage et gestion de l'interaction du joueur du menu de chargement d'une partie sauvegardée /// </summary> public static void MenuChargerPartie() { Console.Clear(); Joueur.Start(); Console.WriteLine("======= Charger une partie ======="); string[] sauvegardes = Sauvegarde.RecupererFichiersSauvegarde(); if (sauvegardes.Length <= 0) { Console.WriteLine("Aucune partie sauvegardée n'a été trouvée."); Console.WriteLine("Appuyez sur une touche pour continuer..."); Console.ReadKey(false); Jeu.MenuPrincipal(); return; } Console.WriteLine("Veuillez sélectionner une sauvegarde ci-dessous"); Console.ForegroundColor = ConsoleColor.Yellow; for (int i = 0; i < sauvegardes.Length; i++) { Console.WriteLine("" + (i + 1) + ")" + sauvegardes[i]); } Console.ResetColor(); int index = -1; do { try { index = Convert.ToInt32(Console.ReadLine()); index = index - 1; if (index < 0 || index >= sauvegardes.Length) { index = -1; } } catch (Exception) { index = -1; } if (index == -1) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ce n'est pas une sélection valide. Veuillez réessayer."); Console.ResetColor(); } }while (index == -1); Sauvegarde.ReglerFichierSauvegarde(sauvegardes[index]); Console.Clear(); Console.WriteLine("======= Charger une partie ======="); try { Sauvegarde.Charger(); } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Impossible de charger la partie. Etes-vous sûr d'avoir un fichier de sauvegarde existant ?"); Console.ResetColor(); Console.WriteLine("Appuyez sur une touche pour continuer..."); Console.ReadKey(false); Jeu.MenuPrincipal(); } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("La partie a été chargée !"); Console.ResetColor(); Console.WriteLine("Appuyez sur une touche pour continuer..."); Console.ReadKey(false); Jeu.DeroulementPartie(); }