示例#1
0
 public void placerNavire(Pos[] positions)
 {
     //pour chaque trou..
     for (int i = 0; i < positions.Length; ++i)
     {
         //on donne sa position
         definirPosition(i, positions[i]);
     }
 }
示例#2
0
 //Trouver où cette position est (son indice) dans le tableau de positions du navire.
 int trouverIndicePosition(Navire nav, Pos p)
 {
     int indice = 0;
     while ((nav._pos[indice]._x != p._x || nav._pos[indice]._y != p._y) && indice < nav._pos.Length)
     {
         ++indice;
     }
     if (indice >= nav._pos.Length)
     {
         //position non trouvée
         return -1;
     }
     return indice;
 }
示例#3
0
 void toucherBateau(Navire nav, Pos p)
 {
     int indice = trouverIndicePosition(nav, p);
     nav._pos[indice]._estTouche = true;
 }
示例#4
0
 //recuperer nom du bateau dans la grille
 String nombateauToucheEst(Pos p)
 {
     return _flotteAttaquee._grille[p._x, p._y].ToString();
 }
示例#5
0
 //change le string a toutes les positions du bateau pour ajouter "coule"
 //pour le joueur attaqué.
 bool CaseTireeEstOccupee(Pos p)
 {
     return !(_flotteAttaquee._grille[p._x, p._y] == "");
 }
示例#6
0
        //Analyse le tir et retourne un message selon le protocol établi avec le client
        String analyserTir(Pos tir)
        {
            String resultat = "";
            //vérifie si l'espace est occupée
            if (CaseTireeEstOccupee(tir))
            {
                //Trouver le navire attaqué dans la flotte attaquée
                Navire navireAttaque = trouverNavireAttaque(nombateauToucheEst(tir));
                //marquer le navire touché 
                toucherBateau(navireAttaque, tir);

                //Vérifie si navire est coulé
                if (bateauEstCoule(navireAttaque))
                {
                    //marquer le navire coulé
                    navireAttaque._estCoule = true;
                    //Vérifie si tous les bateaux coulés
                    _partieEstFinie = PartieEstTerminee(_flotteAttaquee);
                    resultat = "Coule=" + navireAttaque.ToPos();
                    if (_partieEstFinie)
                    {
                        resultat = "" + tir._x + tir._y; //position qui a fait ganger
                    }
                }
                else
                {
                    //touché, non coulé
                    resultat = "Touche=" + tir._x + tir._y;
                }
            }
            else
            {
                resultat = "Manque=" + tir._x + tir._y;
            }
            return resultat;
        }
示例#7
0
        //Méthodes utilisées:

        //Recoit les valeurs numériques sous forme de String et les mets sous forme de notre objet Pos
        //Ne pourrais être utilisé pour des positions de plus de 10 ( de 0 à 9)
        Pos stringToPos(String tir)
        {
            Pos p = new Pos();
            p._x = int.Parse(tir[0].ToString());
            p._y = int.Parse(tir[1].ToString());
            return p;
        }
示例#8
0
        private Pos[] posBateauCourant(DataGridView dgv)
        {
            Pos[] tabPos = new Pos[dgv.SelectedCells.Count];
            int compteurCell = 0;
            foreach (DataGridViewCell cell in dgv.SelectedCells)
            {
                tabPos[compteurCell] = new Pos();
                tabPos[compteurCell]._x = cell.ColumnIndex;
                tabPos[compteurCell]._y = cell.RowIndex;
                ++compteurCell;
            }

            return tabPos;
        }
示例#9
0
 /// <summary>
 ///  Cette fonction transforme un String(formatter en Pos) en Pos et retourne le résultat
 /// </summary>
 /// <param name="aConvertir">Le String à convertir</param>
 /// <returns>La position qui à été transformée</returns>
 private Pos convertStringToPos(String aConvertir)
 {
     Pos pos = new Pos();
     if (aConvertir.Length > 1)
     {
         pos._x = int.Parse(aConvertir.Substring(0, 1));
         pos._y = int.Parse(aConvertir.Substring(1, 1));
     }
     return pos;
 }
示例#10
0
        /// <summary>
        /// Cette fonction valide si les positions passées en paramètre est unique
        /// </summary>
        /// <param name="tabPos">Tableau de positions à valider</param>
        /// <returns>Si les positions sont unique ou non</returns>
        private bool validerPositionUnique(Pos[] tabPos)
        {
            bool estUnique = true;

            // Vérifie si les points sélectionnés correspondent au point d'un bateau déjà placé
            foreach (Navire navire in maFlotte._flotte)
            {
                foreach (Pos p in tabPos)
                {
                    for (int i = 0; i < navire._pos.Length; ++i)
                    {
                        if (navire._pos[i]._x == p._x && navire._pos[i]._y == p._y)
                        {
                            estUnique = false;
                        }
                    }
                }
            }

            return estUnique;
        }
示例#11
0
        /// <summary>
        /// Cette fonction valide la consécutivité des cases sélectionnées
        /// </summary>
        /// <param name="tabPos">Tableau de positions à valider</param>
        /// <returns>Si les positions sont consécutives ou non</returns>
        private bool validerConsecutivite(Pos[] tabPos)
        {
            bool estConsecutif = false;
            if (tabPos != null)
            {
                int DifferenceX = Math.Abs(tabPos[0]._x - tabPos[tabPos.Length - 1]._x);
                int DifferenceY = Math.Abs(tabPos[0]._y - tabPos[tabPos.Length - 1]._y);

                // Avec les possibilités de sélection réduit à une seule ligne droite (pas de diagonale),
                // si la sélection est valide (consécutive), la taille de la selection doit être égal à la différence entre la première
                // et la dernière case
                if (DifferenceX + DifferenceY == tabPos.Length - 1)
                {
                    estConsecutif = true;
                }
            }
            return estConsecutif;
        }
示例#12
0
        //Place les positions des trous d'un navire spécifique.
        //Intrants: no du navire: de 0 à 4
        //          un tableau avec la position de chaque trous.
        public void placerNavire(int noNav, Pos[] positions)
        {
            this._flotte[noNav].placerNavire(positions);

        }
示例#13
0
 private void definirPosition(int noCase, Pos position)
 {
     this._pos[noCase] = position;
 }