예제 #1
0
        //Méthode qui gère la réception des flottes des joueurs
        void preparerPartie()
        {
            //démarrer le commServeur
            _comVersClient.Connection(2);

            //////////////   JOUEUR 1   ///////////
            //Recevoir flotte
            String flotteJ1 = _comVersClient.LireMessage(1);

            System.Console.WriteLine("Flotte 1 recue");
            //Interpréter le message contient flotte: reconstruit l'objet
            _flotte1 = lireFlotte(flotteJ1);
            System.Console.WriteLine("Flotte 1 traitee");

            //////////////   JOUEUR 2   ///////////
            //Recevoir flotte
            String flotteJ2 = _comVersClient.LireMessage(2);

            System.Console.WriteLine("Flotte 2 recue");
            //Interpréter le message contient flotte: reconstruit l'objet
            _flotte2 = lireFlotte(flotteJ2);
            System.Console.WriteLine("Flotte 2 traitee");

            //Définir la première flotte attaquée:
            //Comme le joueur 1 est attaquant, le joueur 2 est attaqué.
            _flotteAttaquee = _flotte2;
            //Donner le signal d'attaquer au premier jouer                                      //Suivi des communications au comServeur...
            _comVersClient.EnvoyerMessage(_attaquant, "Attaque");                                   //envoyer  "attaque"
        }
예제 #2
0
        //lorsque le client envoi tous ses bateaux, on recompose l'object flotte avec le String
        Flotte lireFlotte(String flotte)
        {
            Flotte f = new Flotte();

            String        listeNav   = flotte.Split(':')[1];                   // ex: Flotte=Premierbateau=Pos1Pos2;EtLesSuivants....
            List <String> tabNavires = new List <String>(listeNav.Split(';')); // une ligne Premierbateau=Pos1,Pos2 par élément du tableau

            tabNavires.RemoveAt(tabNavires.Count - 1);

            String[] infoNav;   //Une seule ligne du genre Premierbateau=Pos1,Pos2
            String   nomNav;    // Premierbateau
            String   lisPosNav; // Pos1,Pos2
            int      compteNav = 0;

            foreach (String navire in tabNavires)
            {
                infoNav   = navire.Split('=');
                nomNav    = infoNav[0];
                lisPosNav = infoNav[1];
                String[] tabPos = lisPosNav.Split(',');
                f._flotte[compteNav]._nom = nomNav;
                int comptePos = 0;
                foreach (String coord in tabPos)
                {
                    Pos p = stringToPos(coord);

                    f._flotte[compteNav]._pos[comptePos] = p;
                    f._grille[p._x, p._y] = nomNav;
                    ++comptePos;
                }
                ++compteNav;
            }
            return(f);
        }
예제 #3
0
 public MainFrame()
 {
     InitializeComponent();
     InitTheGrid(DGV_MaGrille);
     InitTheGrid(DGV_GrilleEnemi);
     maFlotte = new Flotte();
     debutPlacerFlotte();
 }
예제 #4
0
 //sert 2 fois au début, pour chaque joueur.
 void placerFlotteSurGrille(Flotte joueur)
 {
     foreach (Navire navire in joueur._flotte)
     {
         //identifier ses positions sur la grille
         foreach (Pos p in navire._pos)
         {
             joueur._grille[p._x, p._y] = navire.getNom();// sera append... avec _touche_coule
         }
     }
 }
예제 #5
0
 //Constructeur
 public Partie()
 {
     //Initialisation des attributs
     //_joueur1 = "Joueur 1";
     //_joueur2 = "Joueur 2";
     _flotte1           = new Flotte();
     _flotte2           = new Flotte();
     _partieEstFinie    = false;
     _tourPremierJoueur = true;
     _comVersClient     = new CommunicationServeur("0.0.0.0", 8888);
     _attaquant         = 1;
 }
예제 #6
0
        //Vérifier si tous les navires sont coulés
        bool PartieEstTerminee(Flotte flotte)
        {
            bool estTerminee = true;

            for (int n = 0; n < flotte._flotte.Length && estTerminee == true; ++n)
            {
                if (flotte._flotte[n]._estCoule == false)
                {
                    estTerminee = false;
                }
            }
            return(estTerminee);
        }
예제 #7
0
 //Alterne la flotte attaqué, le numéro du joueur attaquant et le booléen de tour
 void alternerJoueur()
 {
     if (_attaquant == 1)
     {
         _attaquant = 2;
     }
     else
     {
         _attaquant = 1;
     }
     _tourPremierJoueur = !_tourPremierJoueur;
     //changer la flotte attaquee
     _flotteAttaquee = accesFlotteAttaquee();
 }
예제 #8
0
        private void RemplirFlotte()
        {
            List <Point> positionsA = new List <Point>();
            List <Point> positionsB = new List <Point>();
            List <Point> positionsC = new List <Point>();
            List <Point> positionsD = new List <Point>();
            List <Point> positionsE = new List <Point>();

            var nombreTotalCases = DGV_Choix.ColumnCount * DGV_Choix.RowCount;

            for (int i = 0; i < DGV_Choix.RowCount; i++)
            {
                for (int j = 0; j < DGV_Choix.ColumnCount; j++)
                {
                    switch (DGV_Choix.Rows[i].Cells[j].Value.ToString())
                    {
                    case "A":
                        positionsA.Add(new Point(DGV_Choix.Rows[i].Cells[j].RowIndex, DGV_Choix.Rows[i].Cells[j].ColumnIndex));
                        break;

                    case "B":
                        positionsB.Add(new Point(DGV_Choix.Rows[i].Cells[j].RowIndex, DGV_Choix.Rows[i].Cells[j].ColumnIndex));
                        break;

                    case "C":
                        positionsC.Add(new Point(DGV_Choix.Rows[i].Cells[j].RowIndex, DGV_Choix.Rows[i].Cells[j].ColumnIndex));
                        break;

                    case "D":
                        positionsD.Add(new Point(DGV_Choix.Rows[i].Cells[j].RowIndex, DGV_Choix.Rows[i].Cells[j].ColumnIndex));
                        break;

                    case "E":
                        positionsE.Add(new Point(DGV_Choix.Rows[i].Cells[j].RowIndex, DGV_Choix.Rows[i].Cells[j].ColumnIndex));
                        break;
                    }
                }
            }
            _bateaux.Add(new Bateau(bateau1, positionsA));
            _bateaux.Add(new Bateau(bateau2, positionsB));
            _bateaux.Add(new Bateau(bateau3, positionsC));
            _bateaux.Add(new Bateau(bateau4, positionsD));
            _bateaux.Add(new Bateau(bateau5, positionsE));
            flotte = new Flotte(_bateaux);
        }
예제 #9
0
        Navire trouverNavireAttaque(String nombateau)
        {
            Flotte flotte = accesFlotteAttaquee();
            int    nav    = 0;

            while (flotte._flotte[nav].getNom() != nombateau && nav < flotte._flotte.Length)
            {
                ++nav;
            }
            if (nav >= flotte._flotte.Length)
            {
                //navire non trouvé
                return(null);
            }
            else
            {
                return(flotte._flotte[nav]);
            }
        }
예제 #10
0
        static void Main(string[] args)
        {
            Flotte maFlotte = new Flotte();

            maFlotte._flotte[0]._pos[0].setPos(1, 1);
            maFlotte._flotte[4]._pos[0].setPos(9, 9);


            Console.WriteLine("Mes navires: ");
            Console.WriteLine(maFlotte);

            /* for (int i = 0; i < 5; ++i)
             * {
             *   Console.WriteLine(maFlotte._flotte[i]);
             *   //Console.WriteLine(maFlotte._flotte[i]._pos[0]);
             * }*/

            Console.ReadKey();
        }
예제 #11
0
        /// <summary>
        /// </summary>
        /// <param name="joueur"></param>
        /// <returns></returns>
        private Flotte recevoirPositionBateaux(Socket joueur)
        {
            Flotte flotte = null;

            byte[] buffer      = new byte[joueur.SendBufferSize];
            int    byteLecture = joueur.Receive(buffer);

            byte[] byteFormatter = new byte[byteLecture];

            for (int i = 0; i < byteLecture; ++i)
            {
                byteFormatter[i] = buffer[i];
            }
            // Désérialisation du byte[] en Flotte
            BinaryFormatter recevoir = new BinaryFormatter();

            using (var stream = new MemoryStream(byteFormatter))
            {
                flotte = recevoir.Deserialize(stream) as Flotte;
            }
            return(flotte);
        }
예제 #12
0
        /// <summary>
        /// Fonction principale pour jouer
        /// </summary>
        public void Run()
        {
            try
            {
                if (_nouvellePartie)
                {
                    // Envoie au 2 joueurs que les 2 sont connectés pour pouvoir poursuivre avec le jeux
                    envoyerReponse("Joueur 1 et Joueur 2 connectés", joueur1);
                    envoyerReponse("Joueur 1 et Joueur 2 connectés", joueur2);
                }
                // Recoit la position des bateaux de chaque joueur et l'affecte à une variable globale
                flotteJ1 = recevoirPositionBateaux(joueur1);
                flotteJ2 = recevoirPositionBateaux(joueur2);

                // Envoie de l'ordre de jeu des joueurs ainsi que l'ip de son opposant
                envoyerReponse("1 " + (joueur2.RemoteEndPoint as IPEndPoint).Address, joueur1);
                envoyerReponse("2 " + (joueur1.RemoteEndPoint as IPEndPoint).Address, joueur2);

                // Boucle du jeu
                while (joueur1.Connected && joueur2.Connected && flotteJ1.FlotteEstVivante() && flotteJ2.FlotteEstVivante() && BattleShip_Serveur.Program.SocketEstConnecte(joueur1) && BattleShip_Serveur.Program.SocketEstConnecte(joueur2))
                {
                    envoyerReponse(analyserAttaque(recevoirAttaque(joueur1), flotteJ2.flotte));
                    if (flotteJ2.FlotteEstVivante())
                    {
                        envoyerReponse(analyserAttaque(recevoirAttaque(joueur2), flotteJ1.flotte));
                    }
                }
                if (estNouvellePartie(joueur1))
                {
                    _joueur1NouvellePartie = true;
                }
                if (_joueur1NouvellePartie && estNouvellePartie(joueur2))
                {
                    _nouvellePartie = false;
                    Run();
                }
                else
                {
                    if (!_joueur1NouvellePartie)
                    {
                        envoyerReponse("Joueur 1 s'est déconnecté", joueur2);
                    }
                    else
                    {
                        envoyerReponse("Joueur 2 s'est déconnecté", joueur1);
                    }
                    // lorsque la partie est terminée, on termine la connection
                    Console.WriteLine("Le joueur1 (" + (joueur1.RemoteEndPoint as IPEndPoint).Address.ToString() + ") est déconnecté");
                    joueur1.Close();
                    Console.WriteLine("Le joueur2 (" + (joueur2.RemoteEndPoint as IPEndPoint).Address.ToString() + ") est déconnecté");
                    joueur2.Close();
                }
            }
            catch (SocketException a)
            {
                joueur1.Dispose();
                joueur2.Dispose();
            }
            catch (Exception e)
            {
                // Console.WriteLine(e.Message);
            }
        }