Ejemplo n.º 1
0
        /// <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();
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }