示例#1
0
        /// <summary>
        /// Une fois la saisie validée, ouvre la case si elle n'est pas déjà ouverte.
        /// </summary>
        /// <param name="selection"></param>
        /// <returns>bool : vrai si case a été ouverte, faux si case déjà ouverte.</returns>
        bool VerificationOuvertureEtContenue(int[] selection)
        {
            int[] cible = new int[2];
            cible[1] = selection[1] / 3 - 1;                                      // Conversion coordonnées pour tableau grille
            cible[0] = selection[0] / 4 - 1;                                      // Conversion coordonnées pour tableau grille

            if (!m_Grille[cible[1], cible[0]].Ouvert)                             // N'ouvre pas case déjà ouverte.
            {
                if (m_Grille.OuvrirCase(cible[1], cible[0]) == false && enMarche) //Stop la partie si le joueur meurt
                {
                    m_Grille.DecouvrirBombes();
                    mort     = true;
                    enMarche = false;
                }
                else if (m_Grille.OuvrirCase(cible[1], cible[0]) == false && !enMarche)//Neutralize la bombe au premier tour
                {
                    m_Grille.BombePremierTour(cible);
                    m_Grille.OuvrirCase(cible[1], cible[0]);                         // fix bombes premier tour et l'ouverture des cases vide autour.
                }
                else if (m_Grille.CalculerNbCaseFermer() == m_Grille.NombreDeBombes) //Detection de victoire
                {
                    enMarche = false;
                }
                return(true);
            }
            InterfaceUsager.MessageCaseDejaOuverte();
            return(false);
        }
示例#2
0
        /// <summary>
        /// S'occupe du déroulement de la partie.
        /// </summary>
        /// <returns>bool : vrai si gagnée, faux si perdu.</returns>
        public bool CommencerPartie()
        {
            Stopwatch minuterie = new Stopwatch();

            minuterie.Start();

            //Premier Tour
            InterfaceUsager.DessinerPlateau(nom, m_Grille.Lignes(), m_Grille.Colonnes(), m_Grille.ToString(), selection, m_Grille.NombreDeBombes, mort);
            VerificationOuvertureEtContenue(selection = Touches(m_Grille.Colonnes(), m_Grille.Lignes(), m_Grille.ToString(), selection[0], selection[1]));

            //Autres Tours
            enMarche = true;
            while (enMarche)
            {
                InterfaceUsager.DessinerGrille(nom, m_Grille.Lignes(), m_Grille.Colonnes(), m_Grille.ToString(), selection, m_Grille.NombreDeBombes, mort);
                VerificationOuvertureEtContenue(selection = Touches(m_Grille.Colonnes(), m_Grille.Lignes(), m_Grille.ToString(), selection[0], selection[1]));
                InterfaceUsager.DessinerGrille(nom, m_Grille.Lignes(), m_Grille.Colonnes(), m_Grille.ToString(), selection, m_Grille.NombreDeBombes, mort);
            }

            //Partie Terminé
            minuterie.Stop();
            temps = TimeSpan.FromMinutes(minuterie.Elapsed.TotalMinutes).ToString(@"mm\.ss");

            if (mort)
            {
                InterfaceUsager.DessinerGrille(nom, m_Grille.Lignes(), m_Grille.Colonnes(), m_Grille.ToString(), selection, m_Grille.NombreDeBombes, mort); //Dessine la grille on game over
                InterfaceUsager.MessageDefaite();
                return(false);
            }
            InterfaceUsager.MessageVictoire();
            return(true);
        }
示例#3
0
 /// <summary>
 /// Active la sélection manuelle des cases avec des coordonnées clavier.
 /// Saisir 'f' active la saisie avec flèches
 /// Saisir 'a' fait joueur l'IA si l'option de partie le permet.
 /// Saisir autres choses qu'un coordonnées valide entrainera une erreur.
 /// </summary>
 /// <param name="entree">Saisie du joueur.</param>
 /// <returns>bool : Retourne le consolekey correspondant au choix, si erreur retourne consolekey.e</returns>
 ConsoleKey VerificationEntreeManuelle(string entree)
 {
     if (entree.Length > 2)
     {
         if (VerificationFormatDeLentree(entree))
         {
             positionActuelle[0] = Int32.Parse(entree.Split(' ', StringSplitOptions.RemoveEmptyEntries)[0]) * 4 + 2;
             positionActuelle[1] = Int32.Parse(entree.Split(' ', StringSplitOptions.RemoveEmptyEntries)[1]) * 3 + 2;
             return(ConsoleKey.Enter);
         }
     }
     else if (entree == "f")
     {
         InterfaceUsager.ActiverModeFleche(positionActuelle);
         return(ConsoleKey.F);
     }
     else if (entree == "a")
     {
         return(AppelerIA());
     }
     else
     {
         InterfaceUsager.MessageFormatDentreeErronee();
     }
     return(ConsoleKey.E);
 }
示例#4
0
 /// <summary>
 /// Vérifie si la saisie fait partie du tableau.
 /// </summary>
 /// <param name="entree">Saisie manuelle du l'utilisateur.</param>
 /// <returns></returns>
 bool VerificationDesMinMaxDeLentree(string entree)
 {
     if (Int32.Parse(entree.Split(' ', StringSplitOptions.RemoveEmptyEntries)[0]) <= m_Grille.Colonnes() && Int32.Parse(entree.Split(' ', StringSplitOptions.RemoveEmptyEntries)[1]) <= m_Grille.Lignes())
     {
         return(true);
     }
     InterfaceUsager.MessageHorsLimites();
     return(false);
 }
示例#5
0
        /// <summary>
        /// Agit comme un masque de saisie.
        /// Si l'entrée ne match pas, un message d'erreur de format est affiché.
        /// </summary>
        /// <param name="entree">Saisie manuelle de l'utilisateur.</param>
        /// <returns></returns>
        bool VerificationFormatDeLentree(string entree)
        {
            MatchCollection matches = rx.Matches(entree);

            if (matches.Count == 1)
            {
                return(VerificationDesMinMaxDeLentree(entree));
            }
            InterfaceUsager.MessageFormatDentreeErronee();
            return(false);
        }
示例#6
0
 /// <summary>
 /// Appele l'intelligence artificiel.
 /// </summary>
 /// <returns>bool : vrai si IA actif, faux si partie sans IA</returns>
 ConsoleKey AppelerIA()
 {
     if (intel != null)
     {
         int[] retourIA = intel.MeilleurCoup(m_Grille.ToString()); //Methode
         positionActuelle[0] = (retourIA[1] + 1) * 4 + 2;
         positionActuelle[1] = (retourIA[0] + 1) * 3 + 2;
         InterfaceUsager.MettreAJourSelection(positionActuelle);
         return(ConsoleKey.A);
     }
     InterfaceUsager.MessageIAInactif();
     return(ConsoleKey.E);
 }
示例#7
0
        /// <summary>
        /// Est appelé si le joueur bat son record.
        /// index est le calcule permettant de passer d'un tableau 2D en tableau 1D,
        ///     le calcule permet de modifier le bon score dans le tableau de score du joueur.
        /// </summary>
        /// <param name="info">info[] {nom, grosseur, difficulté, tempsEnMinutes}</param>
        public void MettreAJourJoueur(string[] info)
        {
            Joueur aModifier;

            int index = ((Int32.Parse(info[1]) - (Int32.Parse(info[1]) / 2 + 3))) * 3 + (Int32.Parse(info[2]) - 1);

            if ((aModifier = m_ListeJoueurs.Find(j => j.ObtenirNom() == info[0])) != null)
            {
                if (aModifier.ModifierScore(index, info[3]))
                {
                    InterfaceUsager.MessageNouveauRecord();
                }
            }
            else
            {
                m_ListeJoueurs.Add(new Joueur(info[0], index, info[3]));
            }
        }
示例#8
0
        int[] Touches(int iCol, int iLig, string s_Grille, int xActuel, int yActuel)
        {
            ConsoleKeyInfo touche = new ConsoleKeyInfo(' ', ConsoleKey.Spacebar, false, false, false);

            positionActuelle = new int[2] {
                xActuel, yActuel
            };

            do
            {
                if (auto) //AI en mode automatique
                {
                    AppelerIA();
                    touche = new ConsoleKeyInfo('\n', ConsoleKey.Enter, false, false, false);
                    Thread.Sleep(1000);
                }
                else //Joueur non afk
                {
                    if (InterfaceUsager.Saisie) // En mode flèche
                    {
                        do
                        {
                            InterfaceUsager.ActiverModeFleche(positionActuelle);
                            touche = Console.ReadKey(true);

                            switch ((int)touche.Key)
                            {
                            case 37:
                                positionActuelle = InterfaceUsager.AllerGauche(m_Grille.Colonnes());
                                InterfaceUsager.MettreAJourSelection(positionActuelle);
                                break;

                            case 39:
                                positionActuelle = InterfaceUsager.AllerDroite(m_Grille.Colonnes());
                                InterfaceUsager.MettreAJourSelection(positionActuelle);
                                break;

                            case 38:
                                positionActuelle = InterfaceUsager.AllerHaut(m_Grille.Lignes());
                                InterfaceUsager.MettreAJourSelection(positionActuelle);
                                break;

                            case 40:
                                positionActuelle = InterfaceUsager.AllerBas(m_Grille.Lignes());
                                InterfaceUsager.MettreAJourSelection(positionActuelle);
                                break;

                            case 65:
                                positionActuelle = InterfaceUsager.AllerBas(m_Grille.Lignes());
                                ConsoleKey k = AppelerIA();
                                touche = new ConsoleKeyInfo(k.ToString()[0], k, false, false, false);
                                break;

                            case 67:
                                InterfaceUsager.ActiverModeSaisieManuelle();
                                break;
                            }
                        } while (InterfaceUsager.Saisie && touche.Key != ConsoleKey.Enter && touche.Key != ConsoleKey.A);
                    }
                    else // en mode manuelle
                    {
                        ConsoleKey entree;
                        do
                        {
                            InterfaceUsager.ActiverModeSaisieManuelle();
                            entree = VerificationEntreeManuelle(InterfaceUsager.EntreeManuelle());
                        }while (entree == ConsoleKey.E);
                        touche = new ConsoleKeyInfo(entree.ToString()[0], entree, false, false, false);
                    }
                }
            } while (touche.Key != ConsoleKey.Enter && touche.Key != ConsoleKey.A);
            return(positionActuelle);
        }
示例#9
0
 /// <summary>
 /// Lors de la navigation par flèche ou de l'utilisation de l'IA,
 /// cela met à jour les coordonnées en bas à droite.
 /// </summary>
 /// <param name="positionActuelle"></param>
 public static void MettreAJourSelection(int[] positionActuelle)
 {
     InterfaceUsager.PositionnerCursorPourRepondre();
     Console.Write(positionActuelle[0] / 4 + " " + positionActuelle[1] / 3 + "    ");
     Console.SetCursorPosition(positionActuelle[0], positionActuelle[1]);
 }