/// <summary>Joue la partie.</summary> public void Jouer() { plateau = new Plateau((byte)taille); Stopwatch chrono = new Stopwatch(); // Chronomètre la durée de la partie d'un joueur if (joueur != null) { chrono.Start(); } while (!plateau.Terminer()) { JouerTour(); } if (plateau.Gagne()) { if (joueur != null) { chrono.Stop(); if (chrono.ElapsedMilliseconds < joueur[difficulte, taille]) { joueur[difficulte, taille] = chrono.ElapsedMilliseconds; // Mets à jour le meilleur temps du joueur } } MenuPartie.AfficherPlateau(plateau.ToString(), plateau.Largeur); MenuPartie.PartieGagne(); } else { plateau.RevelerMines(); MenuPartie.AfficherPlateau(plateau.ToString(), plateau.Largeur); MenuPartie.MineOuverte(); } }
/// <summary>Exécute un tour de la partie.</summary> void JouerTour() { MenuPartie.AfficherPlateau(plateau.ToString(), plateau.Largeur); int ligne, col; // Ligne et la colonne à jouer if (joueur == null) // Intelligence artificielle { int coups = IA.JouerCoup(plateau.ToString(), plateau.Largeur); ligne = coups / plateau.Largeur; col = coups % plateau.Largeur; } else // Joueur humain { do { MenuPartie.DemandeJoueur(); ligne = col = 0; string[] entree = MenuPartie.EntreeJoueur().Split(' '); try { col = int.Parse(entree[0]); if (col < 1 || col > plateau.Largeur) // L'entrée de l'utilisateur n'est pas un indice du plateau valide { MenuPartie.EntreeIncorrecte("colonne", plateau.Largeur); } } catch (FormatException) { // L'entrée de l'utilisateur n'est pas un nombre entier MenuPartie.EntreeIncorrecte("colonne", plateau.Largeur); } catch (OverflowException) { // L'entrée de l'utilisateur dépasse la valeur d'un int MenuPartie.EntreeIncorrecte("colonne", plateau.Largeur); } try { ligne = int.Parse(entree[1]); if (ligne < 1 || ligne > plateau.Largeur) // L'entrée de l'utilisateur n'est pas un indice du plateau valide { MenuPartie.EntreeIncorrecte("ligne", plateau.Largeur); } else if (col <= plateau.Largeur && col > 0 && plateau[ligne - 1, col - 1].Ouverte) // La case désirée ne peut pas être déjà ouverte, cela est vérifié que si le numéro de colonne est valide { MenuPartie.CaseOuverte(ligne, col); col = 0; // Le numéro de colonne ne remplit plus la condition de sortie } } catch (FormatException) { // L'entrée de l'utilisateur n'est pas un nombre entier MenuPartie.EntreeIncorrecte("ligne", plateau.Largeur); } catch (OverflowException) { // L'entrée de l'utilisateur dépasse la valeur d'un int MenuPartie.EntreeIncorrecte("ligne", plateau.Largeur); } catch (IndexOutOfRangeException) { // L'entrée de l'utilisateur ne contient pas une espace MenuPartie.ErreurEspace(); } } while (col < 1 || col > plateau.Largeur || ligne < 1 || ligne > plateau.Largeur); // La colonne et la ligne désirée doit être un nombre valide pour continuer // Décrémente les entrées de l'utilisateur ligne--; col--; } if (plateau.PremierCoup()) { DisperserMines(ligne, col); } plateau.OuvrirCase(ligne, col); }