Beispiel #1
0
        // Méthode pour tirer
        public static EtatPartie Tirer(Joueur _joueur, Joueur _adversaire, string _code)
        {
            EtatPartie etatPartie = EtatPartie.JRetire;
            Console.Clear();
            if (IdCases.Contains(_code)) // Vérifier que le code de la case est bien valide
            {
                int xTir = int.Parse(_code.Substring(1));
                int yTir = char.ToUpper(char.Parse(_code.Substring(0, 1))) - 64;
                EtatCase etat = _adversaire.MaGrille.grille[yTir, xTir].Tirer(); // Appeler la méthode Tirer() qui est dans Case.cs
               

                switch (etat)
                {
                    case EtatCase.TirRate:
                        _adversaire.MaGrille.grille[yTir, xTir].ChangerEtat(EtatCase.TirRate);  // MaJ Emplacement du tir sur la grille de l'adversaire
                        _joueur.SaGrille.grille[yTir, xTir].ChangerEtat(EtatCase.TirRate);// MaJ Emplacement du tir sur la grille du joueur représentant celle de l'adv.
                        _joueur.NbTirs += 1; // Incrémenter le nombre de tirs du joueur pour les stats de fin de partie. (ex : Partie finie en X tirs)
                        etatPartie = EtatPartie.JSuivant;                                       
                        break;

                    case EtatCase.TirRateAlready:                                               // Si on tire à un endroit où on a déjà tiré ...
                        Console.WriteLine("Vous avez déjà tiré ici ! Réessayez.\r\n");              // Bah on peut réessayer. C'est gentil non ?
                        etatPartie = EtatPartie.JRetire;
                        break;

                    case EtatCase.BateauTouche:
                        _adversaire.MaGrille.grille[yTir, xTir].ChangerEtat(EtatCase.BateauTouche); // Si on réussit un tir, on update les grilles, et on tire à nouveau.
                        _joueur.SaGrille.grille[yTir, xTir].ChangerEtat(EtatCase.BateauTouche);
                        _joueur.NbTirs += 1; 
                        break;

                    case EtatCase.BateauToucheAlready:                                          // Là encore, c'est pour les tirs sur des bateaux déjà touchés.
                        Console.WriteLine("Vous avez déjà tiré ici ! Réessayez.\r\n");
                        etatPartie = EtatPartie.JRetire;
                        break;
                }
            }
            else // Sinon demander de tirer à nouveau avec un nouveau code.
            {
                Console.WriteLine("Erreur. Vous avez mal écrit le code de la case. Réessayez.\r\n");
                etatPartie = EtatPartie.JRetire;
            }

            // Faire le listing des bateaux qu'il reste à l'adversaire.
            int comptTorp = 1; // Compteurs pour les bateaux existant deux fois (torpilleur et sous marin)
            int comptSM = 1;
            foreach (var bateau in _adversaire.ListBateaux)
            {
                if (bateau.EstCoule(_adversaire.MaGrille, _joueur.SaGrille))
                {
                    if (!_adversaire.ResteBateau())
                    {
                        etatPartie = EtatPartie.PTerminée;
                        break;
                    }
                    Console.WriteLine("Un {0} de l'adversaire est coulé !", bateau.Nom);
                    _adversaire.MaFlotte.PlacerBateau(bateau.Nom); // On réutilise cette fonction pour décrémenter le total de bateaux dans la flotte
                    
                }
                else
                {
                    switch (bateau.Nom)
                    {
                        case NomsBateau.PorteAvions:
                            Console.WriteLine("Il vous reste {0} {1}(s) à couler.", _adversaire.MaFlotte.QuantitePA, bateau.Nom);
                            break;
                        case NomsBateau.Cuirassé:
                            Console.WriteLine("Il vous reste {0} {1}(s) à couler.", _adversaire.MaFlotte.QuantiteCuir, bateau.Nom);
                            break;
                        case NomsBateau.Croiseur:
                            Console.WriteLine("Il vous reste {0} {1}(s) à couler.", _adversaire.MaFlotte.QuantiteCrois, bateau.Nom);
                            break;
                        case NomsBateau.Torpilleur:
                            
                            if (comptTorp == 1) // Ce compteur permet d'éviter d'écrire deux fois la même ligne (Il vous reste 2 torpilleurs à couler.
                                Console.WriteLine("Il vous reste {0} {1}(s) à couler.", _adversaire.MaFlotte.QuantiteTorpi, bateau.Nom);
                            comptTorp++;
                            break;
                        case NomsBateau.SousMarin:
                            
                            if (comptSM == 1)
                                Console.WriteLine("Il vous reste {0} {1}(s) à couler.", _adversaire.MaFlotte.QuantiteSousMarin, bateau.Nom);
                            comptSM++;
                            break;
                    }
                }
            }

            // Actualisation des grilles :
            Console.WriteLine("\r\nVotre grille :");                                    
            _joueur.MaGrille.Draw();
            Console.WriteLine("Grille de votre adversaire :");
            _joueur.SaGrille.Draw();
            return etatPartie;
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            EtatPartie etat = EtatPartie.JRetire;
            DernierTir = NumJoueur.J2;


            Console.WriteLine("Création du joueur 1. Votre nom ?");
            Joueur joueur1 = new Joueur(Console.ReadLine(), NumJoueur.J1);
            joueur1.FaireGrille();

            Console.Clear();
            Console.WriteLine("Vos bateaux ont bien été placés. Laissez la main au second joueur... Appuyez sur une touche pour continuer.");
            Console.ReadKey();

            Console.WriteLine("Joueur 2. Votre nom ?");
            Joueur joueur2 = new Joueur(Console.ReadLine(), NumJoueur.J2);
            joueur2.FaireGrille();

            Console.Clear();
            Console.WriteLine("Vos bateaux ont bien été placés. La grille va être cachée... Appuyez sur une touche pour continuer.");
            Console.ReadKey();

            Console.WriteLine("Laissez la main au premier joueur.");
            Console.ReadKey();          
            
            while (etat != EtatPartie.PTerminée)
            {
                if (DernierTir == NumJoueur.J2)
                {
                    Console.WriteLine("Votre grille :");
                    joueur1.MaGrille.Draw();
                    Console.WriteLine("Grille de votre adversaire :");
                    joueur1.SaGrille.Draw();
                    do
                    {                    
                        Console.WriteLine("{0}({1}), choisissez une case sur laquelle tirer.", joueur1.Nom, joueur1.ID);
                        CaseTir = Console.ReadLine();
                        etat = Tirer(joueur1, joueur2, CaseTir);
                        DernierTir = NumJoueur.J1;
                    } while (etat == EtatPartie.JRetire);
                }
                else if (DernierTir == NumJoueur.J1)
                {
                    Console.WriteLine("Votre grille :");
                    joueur2.MaGrille.Draw();
                    Console.WriteLine("Grille de votre adversaire :");
                    joueur2.SaGrille.Draw();
                    do
                    {                       
                        Console.WriteLine("{0}({1}), choisissez une case sur laquelle tirer.", joueur2.Nom, joueur2.ID);
                        CaseTir = Console.ReadLine();
                        etat = Tirer(joueur2, joueur1, CaseTir);
                        DernierTir = NumJoueur.J2;
                    } while (etat == EtatPartie.JRetire);            
                }


                if (etat == EtatPartie.JSuivant)
                {
                    Console.WriteLine("Appuyez sur une touche et laissez la main au joueur suivant.");
                    Console.ReadKey();
                    Console.Clear();
                    Console.WriteLine("Appuyez sur une touche pour continuer.");
                    Console.ReadKey();
                }
            }

            Console.Clear();

            if (DernierTir == NumJoueur.J1)
                Console.WriteLine("Félicitations {0} ({1}), vous avez gagné la partie en {2} tirs !", joueur1.Nom, DernierTir, joueur1.NbTirs);
            else
                Console.WriteLine("Félicitations {0} ({1}), vous avez gagné la partie en {2} tirs !", joueur2.Nom, DernierTir, joueur2.NbTirs);

            Console.ReadKey();
        }