예제 #1
0
        /// <summary>
        /// Modifie la vie du bateau passé en paramètre associé au joueur passé en paramètres
        /// </summary>
        /// <param name="joueur">Joueur dont on doit modifier un bateau</param>
        /// <param name="type">Type de bateau dont on doit modifier la vie </param>
        /// <param name="x">Position x à la quelle le bateau a été touché</param>
        /// <param name="y">Position y à laquelle le bateau a été touché</param>
        /// <returns>Vrai si le bateau est coulé, Faux sinon</returns>
        public static bool ToucherBateau(int joueur, Bateau.TYPES type, int x, int y)
        {
            int[,] positionbateau = Bateau.ObtenirPositionBateauxJoueur(joueur);
            int[] vieBateaux = Bateau.ObtenirVieBateauxJoueur(joueur);
            int[,] grille         = Grille.ObtenirGrilleJoueur(joueur);
            grille[x, y]          = (int)Grille.Cases.TOUCHE;
            int[,] decouverte     = Grille.ObtenirGrilleDecouverteJoueur(Joueur.ObtenirAutreJoueur(joueur));
            decouverte[x, y]      = (int)Grille.Cases.TOUCHE;
            vieBateaux[(int)type] = vieBateaux[(int)type] - 1;
            //vieBateaux[(int)type] = 0;

            if (vieBateaux[(int)type] <= 0)
            {
                // On marque la bateau comme coulé sur la grille
                for (int o = 0; o < Bateau.LongueurBateaux[(int)type]; o++)
                {
                    if (Bateau.ObtenirAlignementBateau(joueur, type) == ALIGNEMENT.COLONNE)
                    {
                        grille[positionbateau[(int)type, 0], positionbateau[(int)type, 1] + o]     = (int)Grille.Cases.COULE;
                        decouverte[positionbateau[(int)type, 0], positionbateau[(int)type, 1] + o] = (int)Grille.Cases.COULE;
                    }
                    else
                    {
                        grille[positionbateau[(int)type, 0] + o, positionbateau[(int)type, 1]]     = (int)Grille.Cases.COULE;
                        decouverte[positionbateau[(int)type, 0] + o, positionbateau[(int)type, 1]] = (int)Grille.Cases.COULE;
                    }
                }
                return(true);
            }
            return(false);
        }
예제 #2
0
        /// <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();
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Tente un tir sur une cellule par le joueur précisé
        /// </summary>
        /// <param name="joueur">Joueur réalisant le tir</param>
        /// <param name="x">Position x de la cellule visée</param>
        /// <param name="y">Position y de la cellule visée</param>
        /// <param name="coule">Paramètre entrée sortie, contient vrai si un bateau a été coulé suite au tir</param>
        /// <returns>Vrai si un bateau a été touché, faux sinon</returns>
        public static bool Tirer(int joueur, int x, int y, out bool coule)
        {
            coule = false;
            if (Grille.ObtenirGrilleDecouverteJoueur(joueur)[x, y] != (int)Grille.Cases.VIDE)
            {
                return(false);
            }
            int[,] positionBateaux = null;
            int[] vieBateaux = null;
            if (joueur == 1)
            {
                positionBateaux = Bateau.PositionBateauxJ2;
                vieBateaux      = Bateau.VieBateauxJ2;
            }
            else if (joueur == 2)
            {
                positionBateaux = Bateau.PositionBateauxJ1;
                vieBateaux      = Bateau.VieBateauxJ1;
            }
            bool trouve = false;
            int  i      = 0;

            while (trouve == false && i < Bateau.NombreTypesBateaux)
            {
                trouve = positionBateaux[i, 0] <= x && x <= positionBateaux[i, 2] && positionBateaux[i, 1] <= y && y <= positionBateaux[i, 3];
                i++;
            }

            if (trouve == true)
            {
                coule = Bateau.ToucherBateau(Joueur.ObtenirAutreJoueur(joueur), (Bateau.TYPES)(i - 1), x, y);
            }
            else
            {
                int[,] decouverte = Grille.ObtenirGrilleDecouverteJoueur(joueur);
                decouverte[x, y]  = (int)Grille.Cases.DECOUVERT_VIDE;
            }
            return(trouve);
        }